Preserve native authoring evidence and compared semantic contracts
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
|
||||
# Exact source/recovery oracles and archived ledgers retain their measured bytes.
|
||||
# Keep ordinary text diffs; only disable checkout/check-in newline conversion.
|
||||
PROJECT_GOAL.md -text whitespace=cr-at-eol
|
||||
harness/fixtures/release1-native/** -text
|
||||
harness/fixtures/interface-operation-probe/** -text
|
||||
harness/history/2026-09-06-ledgers-before-consolidation/** -text
|
||||
@@ -23,6 +24,9 @@ crates/oa-desktop/src/recovery/fixtures/*.json -text
|
||||
harness/fixtures/source7-native/** -text
|
||||
harness/fixtures/basic-editing/** -text
|
||||
harness/fixtures/scenario-authoring/base/** -text whitespace=cr-at-eol
|
||||
harness/experiments/textual-authoring-20260911/** -text whitespace=cr-at-eol
|
||||
harness/experiments/textual-authoring-20260911/observed/split-entry.arcadia whitespace=-blank-at-eol,cr-at-eol
|
||||
harness/experiments/analysis-context-20260911/** -text whitespace=cr-at-eol
|
||||
|
||||
# Preserve checksum-bound font notices verbatim through Git round trips.
|
||||
scripts/windows-notices/GNOME-Cantarell-61362600e104-COPYING -text
|
||||
|
||||
+19
-10
@@ -608,9 +608,9 @@ Focus on making the application modern, extensible, intuitive and easy to use. W
|
||||
|
||||
Try to address all known problems / downsides of the original ARCADIA Capella software.
|
||||
|
||||
Version 1 MVP in the form of working Operational Analysis layer is done.
|
||||
Version 2 MVP in the form of working Operation Analysis + System Analysis is done.
|
||||
You should make the 1st release version of the project with fully feature complete Operation Analysis + System Architecture, according to this application specification.
|
||||
Version 1 MVP in the form of working Operational Analysis layer is done.
|
||||
Version 2 MVP in the form of working Operation Analysis + System Analysis is done.
|
||||
You should make the 1st release version of the project with fully feature complete Operation Analysis + System Architecture, according to this application specification.
|
||||
Remaining ARCADIA layers will be added in future releases.
|
||||
|
||||
Transitioning of model elements between layers (in both directions) should be easy and intuitive.
|
||||
@@ -623,19 +623,19 @@ You should implement most of the ARCADIA semantics, while adressing original ARC
|
||||
|
||||
The original ARCADIA Capella UI is very bloated, clunky, unintuitive and hard to use. In addition, it lacks a number of quality of life features. You should at all cost avoid making the same mistakes as the developers of the original ARCADIA Capella
|
||||
|
||||
You should explore the functionality & UI of the original ARCADIA Capella to take the most useful and powerful ideas from it. While making them modern, easy to use and understand
|
||||
You should explore the functionality & UI of the original ARCADIA Capella to take the most useful and powerful ideas from it. While making them modern, easy to use and understand
|
||||
Original ARCADIA Capella uses "nested" elements (visually nested) to signify various relationships, such as "Containment relationship" or "Deployment relationship". Instead of using visually noisy arrows / graph edges. I pretty much like this approach and want to see something similar to it in this application
|
||||
|
||||
To explore the original ARCADIA Capella UI & semantics you may use web resources / web search / official and community docs. Or open the original ARCADIA Capella installed on this desktop machine for exploration
|
||||
|
||||
Your second, parallel, goal is to create a textual representation for ARCADIA, similar to SysML v2. So a user can either edit a system model using UI (graphical representation) or text. Both graphical and textual representations should be fully equivalent and have full parity. You may take inspiration from SysML v2. Both graphical and textual representations should have one overarching, concrete, unambiguous spec in reST format, similar to SysML v2 strictness
|
||||
The application should support both forms of editing
|
||||
The textual representation should be easily editable and understandble for both humans and AI
|
||||
The textual representation should be easily handled by version control tools such as Git
|
||||
The underlying semantics of the textual / graphical representation should support traceability of various development artifacts (for example - code, CAD files, electrical schematics, Docx files and anything in between)
|
||||
Your second, parallel, goal is to create a textual representation for ARCADIA, similar to SysML v2. So a user can either edit a system model using UI (graphical representation) or text. Both graphical and textual representations should be fully equivalent and have full parity. You may take inspiration from SysML v2. Both graphical and textual representations should have one overarching, concrete, unambiguous spec in reST format, similar to SysML v2 strictness
|
||||
The application should support both forms of editing
|
||||
The textual representation should be easily editable and understandble for both humans and AI
|
||||
The textual representation should be easily handled by version control tools such as Git
|
||||
The underlying semantics of the textual / graphical representation should support traceability of various development artifacts (for example - code, CAD files, electrical schematics, Docx files and anything in between)
|
||||
The textual representation editor should have syntax highlighting and linting
|
||||
|
||||
The project should also have a backend server / service that you can deploy. The backend server purpose is to give programmatic access to stored system models. So, there also should be a clear REST API for querying, editing and working with models. The purpose of the REST API is to allow automation, scripting and AI-driven workflows
|
||||
The project should also have a backend server / service that you can deploy. The backend server purpose is to give programmatic access to stored system models. So, there also should be a clear REST API for querying, editing and working with models. The purpose of the REST API is to allow automation, scripting and AI-driven workflows
|
||||
An example could be - writing custom plugins for various domain specific software (version control software, CAD software etc...) to establish traceability between development artifacts and a system model
|
||||
|
||||
The desktop application should contain built-in guide / help / tutorial with clear and concise info on modeling concepts, underlying semantics, common modeling scenarios and application features / how to use the app. It should be easy to navigate and explore
|
||||
@@ -655,6 +655,15 @@ Requirements:
|
||||
- Strong, standardized specification.
|
||||
- Strong, standardized API.
|
||||
|
||||
#### Textual notation
|
||||
|
||||
Requirements:
|
||||
|
||||
- Should not have visual noise and clutter.
|
||||
- Should have means to reduce cognitive load when developing system models.
|
||||
- Should be easily editable by humans. And AI agents.
|
||||
- System engineers should be able to easily develop system models (both big and small) using textual notation only.
|
||||
|
||||
### UI
|
||||
|
||||
The focus should be on reducing system engineer's cognitive load when creating / working with a system model. Regardless of the model size (big or small).
|
||||
|
||||
@@ -278,3 +278,44 @@ This is a selected design under implementation, not a native acceptance claim.
|
||||
Native reverse scenario Apply selected a dependency and inserted five overlapping behavior placements into an unrelated architecture view. Core transition correctness did not make that presentation useful. Select the counterpart of the explicit request root and resolve its nearest scenario/process/chain/state owner. Without an explicit destination diagram, keep the exact core candidate and open Behavior; preserve unrelated architecture views. Retain ordinary architecture transition placement and honor explicit diagram choices.
|
||||
|
||||
Automatically creating another architecture view would retain the wrong editing workspace and introduce unrequested model state. Merely navigating to Behavior after adding placements would conceal the presentation damage. Both alternatives are rejected. The selected correction retains one source transaction and Undo operation and guards stale canvas events. Revisit if mixed-root requests or realistic explicit destination workflows require a separate user choice; do not infer such a choice from dependency ordering. Test/build/native acceptance is recorded separately in release-behavior-transition-context-20260906.md.
|
||||
|
||||
## Property baselines and explicit alternative cases — 2026-09-11
|
||||
|
||||
Problem: complete independent bindings repeat shared engineering assumptions in
|
||||
every ordinary study case. The user requires practical text-only development and
|
||||
reduced cognitive load for small and large models. Evaluator implementation
|
||||
simplicity alone cannot justify that authoring cost.
|
||||
|
||||
Select property-owned base values/formulas and one-level case overrides as the next
|
||||
active-study contract to formalize. Every evaluator caller explicitly requests
|
||||
ModelBaseline or a particular Case identity; no active UI selection, unnamed
|
||||
default case or case-to-case inheritance determines meaning. The baseline is the
|
||||
model's explicit property values, not a mandatory extra record for entering the
|
||||
first value. Inherited formulas read the requested effective case. An explicit
|
||||
Unbound override shadows a known base; clearing an override uses the base.
|
||||
|
||||
The [executed comparison](release-analysis-context-experiment-20260911.md) passed
|
||||
218 assertions. Twenty cases with20 fixed/two varying inputs used62 binding rows
|
||||
under B versus480 under D, with identical results. Updating one shared assumption
|
||||
required one B binding versus20 D bindings. Reusable predicates eliminated D's
|
||||
threshold-edit disadvantage, so repeated formulas are not the reason for selection.
|
||||
|
||||
Retain an explicit complete independent freeze/export for intentionally separate
|
||||
assumptions. It must capture effective values/formulas and the full exact definition
|
||||
environment, including package pins; copying only case rows leaves hidden live
|
||||
dependencies. Captured revisions and per-input origins must make propagation
|
||||
visible. Effective dependency/cycle validation and stale result handling must cover
|
||||
the whole requested context.
|
||||
|
||||
Reject compulsory complete cases for ordinary shared-assumption modeling; retain
|
||||
their useful isolation as an explicit independent snapshot. Reject arbitrary
|
||||
inheritance and UI-dependent evaluation. Do not import the tiny experiment
|
||||
interpreter as production architecture. Exact check identity, type/operator
|
||||
algebra, source syntax, library closure/compatibility, transitions and public
|
||||
snapshot formats still require the coordinated precise contract. Current source7
|
||||
does not implement this decision.
|
||||
|
||||
Revisit if complete text/native tasks expose unacceptable hidden propagation,
|
||||
wrong-context edits or inability to preserve reproducible independent studies.
|
||||
The comparison establishes semantic/text maintenance evidence, not human task
|
||||
timings or full quantity/library integration acceptance.
|
||||
|
||||
+13
-9
@@ -1,6 +1,6 @@
|
||||
# First release execution plan
|
||||
|
||||
Updated 2026-09-10. [PROJECT_GOAL.md](../PROJECT_GOAL.md) is the authoritative
|
||||
Updated 2026-09-11. [PROJECT_GOAL.md](../PROJECT_GOAL.md) is the authoritative
|
||||
current objective. [STATE.md](STATE.md) records exact execution/evidence and leases;
|
||||
[TASK_LEDGER.md](TASK_LEDGER.md) separates facts, assumptions and decisions.
|
||||
The complete previous plan is [preserved byte-for-byte](history/2026-09-10-ledgers-before-continuation-refresh/PLAN.md).
|
||||
@@ -12,6 +12,8 @@ Deliver usable, complete OA/SA engineering workflows on Windows and Linux, with
|
||||
one precise reST contract and equivalent graphical, textual and REST editing.
|
||||
Constraints/calculations, quantities/units and reusable libraries are explicit
|
||||
requirements alongside behavior/state modeling, traceability and navigable help.
|
||||
Small and large models must be practical to author entirely in uncluttered text;
|
||||
evaluate complete authored and stabilized models, not abbreviated grammar sketches.
|
||||
Later Arcadia layers remain future scope. Compilation, metadata fields and polished
|
||||
screens alone do not satisfy this outcome.
|
||||
|
||||
@@ -25,11 +27,11 @@ broad downstream changes. Do not silently promote a design proposal to a decisio
|
||||
|
||||
| Milestone | Work and acceptance | Dependency/current limit |
|
||||
| --- | --- | --- |
|
||||
| 1. Reliable direct authoring | Finish cold compilation and meaningful regressions; integrate compact named architecture/behavior creation and scenario workspace. Exercise actual minimum/wide native creation, allocation, editing, rejection, cancellation and history without implicit draft application or placement drift. | Root owns this host's Cargo/native lease. External host owns scenario layout/B3/local creation/palette; integrate coherent checkpoints first. No current local Rust/native Studio pass. |
|
||||
| 2. Coherent process/scenario work | Interactive ordered/explicit process editing; clicked root/nested scenario insertion; exact reuse bindings and caller return; measured canvas/zoom/scroll; visible scoped Create/Delete lifetimes. Validate model/source/identity and no unintended edit during navigation, including stale/deleted/retargeted references and recovery. | B1/B2/B3 adapters are source-integrated; B3 has a known externally owned correction. B4 is cfg(test) projection only, awaiting Scene integration. The independent oracle compiled/self-checked and its generated baseline passed; use it for native checkpoints. |
|
||||
| 1. Reliable direct authoring | Exercise actual minimum/wide native creation, allocation, editing, rejection, cancellation and history without implicit draft application or placement drift. Integrate compact named behavior creation after its coherent external gate. | Full local desktop suite passes 642/642 at80cf197; GUI build/native and strict lint remain open. Workspace/B3/palette/recovery/packages are imported. Root owns this host's Cargo/native lease. |
|
||||
| 2. Coherent process/scenario work | Interactive ordered/explicit process editing; clicked root/nested scenario insertion; exact reuse bindings and caller return; measured canvas/zoom/scroll; visible scoped Create/Delete lifetimes. Validate model/source/identity and no unintended edit during navigation, including stale/deleted/retargeted references and recovery. | B1/B2/B3 regressions pass in the full suite. B4 is cfg(test) projection only; real lifetime extents, branch-local activation clipping, incomplete lanes and self-arrow endpoints require integration. Use the independently self-checked oracle for native checkpoints. |
|
||||
| 3. Precise engineering analysis | Compare owned properties, analysis contexts and existing-data/external alternatives; settle quantity kind/unit/value, numerical policy, calculation/binding and Boolean/error/unknown semantics through falsifying examples. Implement mixed-unit budgets and reusable calculation/constraint definitions with full UI/source/REST parity and exact history/recovery. | New requirement audit confirms absence. Maximum-reasoning proposal tracks precede root synthesis and independent criticism; no semantic contract is ratified yet. Strings are not evaluation. |
|
||||
| 4. Maintained reusable libraries | Compare package/definition/instance alternatives. Establish pinned identity/version/dependency closure, local edits, import bindings, detach and explicit three-way updates. Demonstrate two projects, two independent instances, offline reopen, conflicting updates and stable unaffected identities. | Coordinate with milestone 3 definition references and migration. Same-project includes/reuse do not satisfy maintained cross-project libraries. No package contract implemented yet. |
|
||||
| 5. Understandable complete engineering tasks | Close teaching, OA↔SA transition/reconciliation, typed state/data/interface, artifact, saved-view and hosted workflows. Replace concrete long homogeneous selectors with contextual/searchable bounded choices; verify representative large models, keyboard access, minimum sizes and failure/recovery. Keep offline guide and exact worked examples aligned. | Existing implementations and historical evidence are a coverage starting point. Reassess against current goal instead of reviving stale absence claims or carrying old scope exclusions forward. |
|
||||
| 5. Understandable complete engineering tasks | Close teaching, OA↔SA transition/reconciliation, typed state/data/interface, artifact, saved-view and hosted workflows. Establish complete text-only creation/refactoring/modular maintenance with stable identity. Replace concrete long homogeneous selectors with contextual/searchable bounded choices; verify large models, keyboard access, minimum sizes and failure/recovery. Keep offline guide/examples aligned. | A complete warning-free text-only model probe passes source/identity/rename/reparent/file-move checks; measure usability separately. Anchored chooser is an undeclared widget experiment. Reassess current goal rather than copying historical scope exclusions. |
|
||||
| 6. Release confidence and delivery | Fresh current Windows/Linux suites, strict Clippy/format, normative reST/OpenAPI/migration/examples; actual GUI/service transport, optimized builds, runtime/notices/archive/provenance/checksums and clean-environment launch. Fresh independent requirements/domain/parity/architecture/UX/runtime review; resolve material findings, then final handoff. | Integrates all preceding capabilities. Linux runtime remains open; use an approved supported environment, preserving historical failed/denied experiments. Historical previews are not final distributions. |
|
||||
|
||||
Milestones are capability gates, not a rigid serial schedule. Root can continue
|
||||
@@ -40,16 +42,18 @@ cross-representation evaluators guide implementation boundaries.
|
||||
|
||||
## Immediate execution sequence
|
||||
|
||||
1. Observe the existing one-job desktop build to completion; preserve failures and
|
||||
fix causes. Run focused corrected cases, then proportionate full gates and GUI.
|
||||
1. Finish the current GUI build and format/strict Clippy checks, then run native
|
||||
engineering tasks. The current 642-test desktop suite has passed; rerun for new
|
||||
code or unresolved failures, not as a substitute for runtime evaluation.
|
||||
2. Exchange exact verified commits with the separate host, preserving its workspace
|
||||
ownership. Do not merge the bundle-transfer branch or assume remote publication.
|
||||
3. Use the self-checked [scenario oracle](scenario-authoring-contract.rs), follow
|
||||
its [native procedure](fixtures/scenario-authoring/README.md), and compare exact
|
||||
whole snapshots for Undo/Redo/reopen at minimum/wide sizes.
|
||||
4. Synthesize the [requirement delta](release-requirements-delta-20260910.md) and
|
||||
independent semantic proposals; subject materially different candidates to
|
||||
concrete numerical, identity, migration and engineering-workflow falsifiers.
|
||||
4. Resolve the paired semantic criticism with concrete text-only package normalization,
|
||||
cosmetic revision/type compatibility, subjectless analysis closure, OA/SA mounted
|
||||
data transitions, baseline-versus-case maintenance and closed numeric algebra
|
||||
experiments. Select coherent contracts before production metamodel expansion.
|
||||
5. Update current ledgers and durable decisions when evidence changes the plan.
|
||||
Reassess unresolved assumptions before expanding downstream implementation.
|
||||
|
||||
|
||||
+63
-41
@@ -1,6 +1,6 @@
|
||||
# Progress Ledger — first release
|
||||
|
||||
Updated 2026-09-10, coordination through Gitea #92. This ledger describes the
|
||||
Updated 2026-09-11, coordination through Gitea #116. This ledger describes the
|
||||
Codex-956atf checkout; external-host evidence is labeled separately. The entire
|
||||
previous ledger is preserved [byte-for-byte](history/2026-09-10-ledgers-before-continuation-refresh/STATE.md).
|
||||
Historical dates, binaries, process IDs and stopped-session instructions in that
|
||||
@@ -12,12 +12,13 @@ Deliver the complete, usable OA/SA first release in [PROJECT_GOAL.md](../PROJECT
|
||||
including graphical/source/REST parity, constraints/calculations, quantities/units,
|
||||
reusable model libraries, traceability, offline guidance and Windows/Linux release
|
||||
acceptance. Direct behavior/scenario authoring and reduced cognitive load remain
|
||||
immediate priorities. The release is incomplete.
|
||||
immediate priorities. Complete small and large models must be practical to develop
|
||||
through uncluttered text alone. The release is incomplete.
|
||||
|
||||
Local branch: `codex/behavior-authoring-20260910`; source checkpoint `aa40345281e6ae8f203063840f1766ba9ce8381c`.
|
||||
Local branch: `codex/behavior-authoring-20260910`; implementation checkpoint `80cf197be6f1d400bf0b9c84bf8557f88c895aa6`.
|
||||
The authoritative goal was copied byte-identically from attachment
|
||||
`2f1f0002-e43c-45ba-80a8-b359f05f99d0/goal-objective.md`; SHA256
|
||||
`7C1BDBD077E31439501C04DC3613E6BE47A389704DDC3A44EF8BD9AD98EBB513`.
|
||||
`a49d1780-25d5-4778-ad68-6140c60e4207/goal-objective.md`; SHA256
|
||||
`DD58F75C93D55FE16ED141A23D834898FB6EBC625AE7E7AE379DA552A8312435`.
|
||||
See [Task Ledger](TASK_LEDGER.md) for knowledge/decisions and [Plan](PLAN.md)
|
||||
for capability acceptance. Older goal paths are superseded.
|
||||
|
||||
@@ -26,72 +27,93 @@ for capability acceptance. Older goal paths are superseded.
|
||||
| Scope | Current evidence and limits |
|
||||
| --- | --- |
|
||||
| Reproducible local toolchain | Ignored `.local/toolchain/env.ps1` selects Rust/Cargo 1.98.1 GNU/LLVM and verified LLVM-MinGW 20260908 (clang 23.1.1), with one Cargo job. First cold desktop test build completed in 58m03s; one unused import warning was corrected separately. |
|
||||
| B1 process authoring | `01bb52a` includes interactive empty/ordered/explicit topology and presentation-only inferred paths; first conversion preserves ordered adjacency atomically. Source review and added boundary tests exist; current local Rust/native acceptance is pending. |
|
||||
| B2 scenario authoring | Clicked root/operand/slot and optional lifeline feed Action/State/Reuse/Fragment adapters. Pointer-to-App, cancellation, stale-event, recovery and history tests are written, not yet locally executed. |
|
||||
| B3 caller navigation | Bounded caller/use frames and scoped viewport restoration are implemented. External tests exposed a real same-selected-ID/visible-owner defect, detailed below; this feature is not accepted. |
|
||||
| B1 process authoring | `01bb52a` includes interactive empty/ordered/explicit topology and presentation-only inferred paths; first conversion preserves ordered adjacency atomically. All topology regressions pass within the current full desktop suite. Native acceptance is pending. |
|
||||
| B2 scenario authoring | Clicked root/operand/slot and optional lifeline feed Action/State/Reuse/Fragment adapters. Pointer-to-App, cancellation, stale-event, recovery and history tests pass within the current full desktop suite. |
|
||||
| B3 caller navigation and workspace | External `3978bbe` imported as `865cd55` fixes visible-owner restoration, pending-draft guards and remaining-height workspace. Root `80cf197` keys the viewport Sensor by document/scenario; a real mounted regression failed before the fix and now passes. Current full desktop suite is green; native acceptance remains pending. |
|
||||
| Architecture palette | External palette commit `7d1df4f` was cherry-picked as `aed40d7`, retaining local invariant tests. Captured Escape, stale Submit/raw retention and bounded card fixes are source-integrated. External native results do not transfer to this checkout. |
|
||||
| Typed stored-history F1 | `b6b76ef` fixes nullable constructor cache discrimination; `4ecad78` fixes NotApplicable seeding by checking actual enum alternatives. Thirteen focused history tests await local execution; core validation remains authoritative. |
|
||||
| Typed stored-history F1 | `b6b76ef` fixes nullable constructor cache discrimination; `4ecad78` fixes NotApplicable seeding by checking actual enum alternatives. Thirteen focused tests passed and are included in the current full suite; core validation remains authoritative. |
|
||||
| Lifeline lifecycle B4 | `eb5161b` adds pure local/scope-aware lifecycle projection with ten tests, declared under `cfg(test)` only. It is not production Scene wiring or native acceptance. [Design](release-scenario-lifecycle-design-20260910.md). |
|
||||
| Native scenario oracle | [Independent checker](scenario-authoring-contract.rs) compiled with warnings denied using completed matching core/JSON rlibs; self-check, generation and whole-baseline check passed (exit 0). The checked-in fixture has 62 elements/two sources, eight OA/SA semantic checkpoints and exact identity discrimination for history. [Inputs/hashes/instructions](fixtures/scenario-authoring/README.md). Studio native use remains pending. |
|
||||
| Native scenario oracle | [Independent checker](scenario-authoring-contract.rs) compiled/self-checked and verified the generated62-element/two-source baseline. Native OA root Action and exact Save/Undo/Redo pass at minimum size; native caller identity/scroll return and source-neutral navigation pass. Remaining prescribed checkpoints are open. [Native scope](release-scenario-native-20260911.md), [oracle inputs](fixtures/scenario-authoring/README.md). |
|
||||
| Normative documentation | Strict Docutils 0.22.2 language HTML regeneration passed. `semantic_schema.py --check --validate` passed 72 source7 fixtures, 204 schemas, 14 families/90 scalar leaves. These are documentation/schema gates, not a Rust build or runtime pass. |
|
||||
| Comparable-product study | Actual isolated Capella 7.1 scenario/activity/lifeline/LOOP creation was saved and XML inspected, then closed normally. [Report](release-capella-scenario-benchmark-20260910.md). No Studio native workflow has run on this fresh host. |
|
||||
| Comparable-product study | Actual isolated Capella 7.1 scenario/activity/lifeline/LOOP creation was saved and XML inspected, then closed normally. [Report](release-capella-scenario-benchmark-20260910.md). Current Studio native evidence is recorded separately. |
|
||||
| New requirement audit | [Independent delta report](release-requirements-delta-20260910.md) establishes that current expressions/unit labels are descriptive and source includes are not maintained cross-project libraries. Separate foundational design proposals remain under investigation, not ratified or implemented. |
|
||||
| Packaging integration | External `b98f135` imported as `6d2b961`; all 25 checked-in exact notices match the manifest. `scripts/test-package-artifacts.py` passes 11/11 and `scripts/test-windows-notices.ps1` passes synthetic package/runtime/source/font checks. Actual optimized distributions and clean-environment launches remain open. |
|
||||
|
||||
## Active work, ownership and unresolved findings
|
||||
|
||||
Root Codex-956atf owns this host's integration, serialized Cargo and native UI.
|
||||
Session `51036` completed `cargo test --locked -p oa-desktop --bin arcadia-studio --no-run`
|
||||
with exit 0 (log `.local/logs/desktop-test-build.log`). The executable is
|
||||
The integrated command `cargo test --locked -p oa-desktop --bin arcadia-studio -- --test-threads=1`
|
||||
completed with exit 0: **642 passed, zero failed/ignored**, tests 141.25 seconds,
|
||||
warning-free build 36.31 seconds. Log `.local/logs/desktop-integrated-20260911.log`.
|
||||
Implementation inputs match `80cf197`. The executable is
|
||||
`target/debug/deps/arcadia_studio-58e30cee1fd51a8b.exe`, SHA256
|
||||
`95A3B78E5A61AB5E9750C2FC077138247E538D9360720A7A8E0CBB47B882ECC1`,
|
||||
629-test inventory. Rust implementation inputs match `8547b85`; the unused palette
|
||||
import correction in `aa40345` is later than compiler consumption and requires a
|
||||
fresh build for warning-free acceptance. No Studio GUI has launched here.
|
||||
`DF122CAF7CFB63A3A9D0D2F2098944CF88F53C4ADA2C43B576B2836F6FD42BE8`.
|
||||
The GUI build passed in3m28s; executable SHA256
|
||||
`A5ED6DF334B1BFB620425AFDF3E863F0B522990E6FB47C6C401A71CF4443954A`.
|
||||
Studio is running from immutable `.local/native-qa/studio-80cf197/`. Actual caller
|
||||
identity/scroll return, source-neutral navigation and minimum-size OA root Action
|
||||
creation with exact Save/Undo/Redo comparisons pass. [Native evidence and remaining
|
||||
gates](release-scenario-native-20260911.md). Formatting passed. Strict Clippy found
|
||||
two collapsible-if cases; root corrected them. The isolated chooser is now declared
|
||||
under cfg(test). Its warning-free first compile completed;9/12 focused tests pass.
|
||||
Three failures trace to test inputs that sent whole strings as single physical key
|
||||
events; the worker is correcting realistic typing and adding paste/IME coverage.
|
||||
No production chooser integration or current passing whole-suite claim follows.
|
||||
|
||||
Direct executable runs with `--test-threads=1` passed history 13/13, pure lifecycle
|
||||
Historical first-binary runs with `--test-threads=1` passed history 13/13, pure lifecycle
|
||||
10/10, topology 45/45, architecture authoring 18/18 and mounted scroll 5/5. Scenario
|
||||
direct tests passed 13/14 and reproduced the known caller-return assertion failure
|
||||
at `scenario.rs:2473`; do not count that filter as passing. Logs are
|
||||
`.local/logs/history-fields-focused.log` and `.local/logs/focused-*.log`. The full
|
||||
suite has not run. Gitea #97's exact integration bundle was anonymously fetched,
|
||||
decoded, SHA256-verified and admitted with `git bundle verify`; source integration
|
||||
and a new build follow. Source the local toolchain before later commands and keep
|
||||
`.local/logs/history-fields-focused.log` and `.local/logs/focused-*.log`. The current
|
||||
642/642 suite supersedes that known failure after its correction; do not add filter
|
||||
counts to the full total. Gitea #97's exact integration bundle was anonymously fetched,
|
||||
decoded, SHA256-verified and admitted with `git bundle verify`; selected source and
|
||||
packaging commits are integrated. Source the local toolchain before commands and keep
|
||||
one Cargo writer. The independent checker used completed rlibs without another
|
||||
Cargo writer; its evidence is separately scoped above.
|
||||
|
||||
Codex-9e8r6t is a separate host/team with a warm cache. It owns scenario workspace
|
||||
layout/B3 correction, local named behavior creation, palette and platform/packaging.
|
||||
Its latest reported mounted-layout slice passed 8/8 focused tests (#82); subsequent
|
||||
raw-draft guard, B3 owner correction and integrated seed fix await its focused gate.
|
||||
Its source/commit is not yet imported here. Earlier immutable integrated tests
|
||||
passed 615/618, exposing the seed and navigation cases; that is external evidence,
|
||||
not a current local suite result. Its creation module is prepared but not declared,
|
||||
compiled or natively accepted (#81). Packaging `b98f135` is likewise not imported.
|
||||
Its coherent workspace and packaging checkpoint is imported. New local named
|
||||
behavior creation passed its 20 focused tests (#115), with broader checks/review
|
||||
and a verified transfer still pending. Its current native basic-editing checkpoint
|
||||
passed its independent model/four-source oracle; that is external evidence, not
|
||||
this host's acceptance. It owns docs/language.rst source7/default corrections,
|
||||
examples/release1 README schema correction and local-creation README guidance (#116).
|
||||
|
||||
B3 diagnosis (#79): command execution may preselect an occurrence while another
|
||||
scenario remains visible; `select(same_id)` then returns without restoring the
|
||||
caller owner. Back/OpenUse must establish visible owner and selection together.
|
||||
Retarget rejection also needs a correctly established pre-Back test state. Preserve
|
||||
exact source/history and mounted viewport checks. External ownership includes
|
||||
explicit guards against tool selection silently applying a pending property draft.
|
||||
caller owner. The imported correction now establishes owner and selection together.
|
||||
Root's additional Sensor regression proves same-size owner/document changes must
|
||||
remeasure Fit; see `.local/logs/scenario-sensor-before-fix.log` for the red result.
|
||||
Exact source/history and mounted viewport checks pass in the integrated suite.
|
||||
|
||||
Maximum-reasoning analysis/quantity and library tracks own separate proposal
|
||||
reports only (#83/#86). Missing calculation evaluation, dimensional/unit semantics,
|
||||
maintained library reuse and concrete unbounded selectors are release gaps. No
|
||||
broad shared core/schema changes are justified until synthesis and criticism.
|
||||
Analysis/quantity and library proposals plus paired independent criticism are ready
|
||||
for synthesis. Remaining material questions: text-only instance base/map creation,
|
||||
cosmetic package updates versus quantity/type compatibility, subjectless case export
|
||||
closure, mounted data OA/SA transition policy, repeated case assumptions and closure
|
||||
of anonymous dimension operations. No production contract is ratified. Isolated
|
||||
text-only source experiments, baseline-versus-complete-case experiments and an
|
||||
undeclared anchored reference chooser widget are active; their passing claims must
|
||||
remain separate from the 642-test implementation. Root owns their integration.
|
||||
|
||||
B4 independent Scene review (#114) identifies real integration boundaries: insertion
|
||||
sequence bounds are not lifetime extents; activation tails must not continue past
|
||||
branch-local Delete; incomplete represented=None lifelines still need geometry;
|
||||
self Create/Delete arrives at row+24. The pure projection has not yet been wired.
|
||||
|
||||
Both hosts report direct Git push authentication unavailable. Anonymous fetch and
|
||||
authenticated Gitea MCP remain usable. Exact verified bundles are exchanged on
|
||||
`codex/behavior-transfer-20260910`; do not merge that transfer branch. Existing
|
||||
bundles cover `01bb52a`, `b6b76ef`, `eb5161b` and incremental `4ecad78`; exact hashes,
|
||||
prerequisites and readback are preserved in the [archived ledger](history/2026-09-10-ledgers-before-continuation-refresh/STATE.md)
|
||||
and Gitea #65/#76. Latest verified transfer is `harness/transfers/behavior-aa40345.bundle.b64` on that branch (Gitea #92): 24,926 decoded bytes, prerequisite `4ecad78`, SHA256 `21B36D5016600953D95F064AE56569B6C8E7D3EA2B3B316C97222AD122FECA4F`. It includes the requirements audit and removal of an unused palette import after an actual compiler warning; the build is still incomplete. Root owns subsequent transfer and integration.
|
||||
and Gitea #65/#76. Latest verified outgoing transfer is `harness/transfers/behavior-aa40345.bundle.b64` on that branch (Gitea #92): 24,926 decoded bytes, prerequisite `4ecad78`, SHA256 `21B36D5016600953D95F064AE56569B6C8E7D3EA2B3B316C97222AD122FECA4F`. Later native oracle, proposals, ledgers and Sensor correction still need publication. Root owns subsequent transfer and integration.
|
||||
|
||||
## Remaining gates and highest-value next actions
|
||||
|
||||
1. Finish the active build; diagnose actual failures. Run focused history,
|
||||
architecture, topology, clicked scenario, caller navigation and lifecycle tests,
|
||||
then relevant full suites, strict Clippy and current GUI build. Record exact tree.
|
||||
1. Finish the active GUI build and current format/strict Clippy gates. The full
|
||||
desktop suite has passed; repeat only for new source changes or unresolved risk.
|
||||
Record exact implementation/binary and run the real application.
|
||||
2. Integrate the externally verified workspace/B3/local creation/palette/package
|
||||
checkpoints without overwriting ownership or treating their earlier tests as new
|
||||
local acceptance. Wire B4 only after coordinating actual Scene geometry.
|
||||
@@ -115,7 +137,7 @@ and Gitea #65/#76. Latest verified transfer is `harness/transfers/behavior-aa403
|
||||
## Reassessment
|
||||
|
||||
Meaningful progress continues: concrete interaction defects have been found and
|
||||
corrected, the cold toolchain is advancing, exact native evaluation is prepared,
|
||||
corrected, all 642 desktop tests pass, exact native evaluation is prepared,
|
||||
and the revised semantic requirements are no longer hidden behind metadata.
|
||||
Passing older suites or accumulating prose would not close the user problem.
|
||||
Current highest information gain comes from actual build/native results and
|
||||
|
||||
+40
-16
@@ -1,17 +1,18 @@
|
||||
# Task Ledger — first release
|
||||
|
||||
Updated 2026-09-10. [STATE.md](STATE.md) owns current execution/evidence;
|
||||
Updated 2026-09-11. [STATE.md](STATE.md) owns current execution/evidence;
|
||||
[PLAN.md](PLAN.md) owns capability milestones. The entire former Task Ledger is
|
||||
[preserved byte-for-byte](history/2026-09-10-ledgers-before-continuation-refresh/TASK_LEDGER.md).
|
||||
Its old goal references, aggregate test claims and stopped-session directives retain
|
||||
historical scope. This ledger does not add new semantic design decisions.
|
||||
historical scope. New semantic decisions are recorded explicitly in DECISIONS.md;
|
||||
prototype results retain their separate scope.
|
||||
|
||||
## Goal and success criteria
|
||||
|
||||
Deliver the usable, feature-complete OA/SA first release specified in
|
||||
[PROJECT_GOAL.md](../PROJECT_GOAL.md). It is the exact copy of the user's revised
|
||||
`2f1f0002-e43c-45ba-80a8-b359f05f99d0/goal-objective.md`, SHA256
|
||||
`7C1BDBD077E31439501C04DC3613E6BE47A389704DDC3A44EF8BD9AD98EBB513`.
|
||||
`a49d1780-25d5-4778-ad68-6140c60e4207/goal-objective.md`, SHA256
|
||||
`DD58F75C93D55FE16ED141A23D834898FB6EBC625AE7E7AE379DA552A8312435`.
|
||||
|
||||
Success requires coherent explicit semantics, practical engineering workflows,
|
||||
equivalent graphical/textual/REST behavior, real Windows/Linux runtime evidence,
|
||||
@@ -31,6 +32,8 @@ cannot establish completion.
|
||||
- Human/AI/Git-friendly source and a concrete unambiguous reST specification must
|
||||
match graphical editing. The source editor needs highlighting/linting; help must
|
||||
be offline, concise and navigable.
|
||||
- The newest explicit goal requires uncluttered notation that reduces cognitive
|
||||
load and supports development of complete small and large models using text alone.
|
||||
- Direct behavior/scenario diagram authoring and reduced cognitive load are current
|
||||
priorities. Long homogeneous selectors and bloated persistent creation controls
|
||||
are rejected. Study actual Capella's useful domain workflows and nesting without
|
||||
@@ -50,15 +53,17 @@ cannot establish completion.
|
||||
are evaluator evidence, not native Studio acceptance. Exact inputs/hashes are in
|
||||
[the fixture instructions](fixtures/scenario-authoring/README.md).
|
||||
|
||||
- Current local source is `aa40345` on `codex/behavior-authoring-20260910`, following
|
||||
- Current local implementation is `80cf197` on `codex/behavior-authoring-20260910`, following
|
||||
baseline `1797516`. Local commits cover B1/B2/B3 authoring, nullable history cache
|
||||
(`b6b76ef`), external palette integration (`aed40d7`), cfg(test) lifecycle projection
|
||||
(`eb5161b`), history seed correction (`4ecad78`) and exact-identity native oracle. Latest `aa40345` commits the requirements audit
|
||||
and an unused-import correction prompted by the active compiler.
|
||||
(`eb5161b`), history seed correction (`4ecad78`) and exact-identity native oracle.
|
||||
Later imports add focus recovery, exact packaging notices and scenario workspace/
|
||||
owner restoration. Root80cf197 fixes document/scenario viewport Sensor identity
|
||||
with a real mounted red-before/green-after regression.
|
||||
- This fresh host has task-local Rust/Cargo 1.98.1 GNU/LLVM and verified LLVM-MinGW.
|
||||
The one-job desktop test no-run build is active, with no local Rust build/test or
|
||||
Studio native pass yet. The history suite has thirteen tests; lifecycle has ten,
|
||||
both awaiting local execution. [Progress and evidence](STATE.md).
|
||||
The integrated full desktop suite passes642/642, zero failed/ignored, with a
|
||||
warning-free build. History and pure lifecycle tests are included. Current GUI
|
||||
build/native and strict lint remain open. [Exact hashes/logs](STATE.md).
|
||||
- Strict language HTML regeneration and the source7 OpenAPI checker passed locally:
|
||||
72 fixtures, 204 schemas and 90 scalar leaves. Actual isolated Capella scenario,
|
||||
activity/lifeline and LOOP creation was saved/inspected; this is reference study,
|
||||
@@ -75,13 +80,14 @@ cannot establish completion.
|
||||
- The same audit identifies concrete unbounded Constraint target choices and generic
|
||||
expanded collection editors. Explorer already has hierarchy/search/paging; the
|
||||
problem is targeted, not a claim that all selection is flat.
|
||||
- Gitea #79 distinguishes a B3 retarget evaluator setup error from the real
|
||||
same-selected-ID/visible-owner navigation defect. The external scenario owner
|
||||
corrects owner restoration and pending-draft guards. External layout 8/8 passes
|
||||
precede subsequent edits and do not establish current local/native acceptance.
|
||||
- Gitea #79's same-selected-ID/visible-owner defect is fixed in the imported
|
||||
scenario checkpoint; owner restoration and pending-draft guards pass current
|
||||
tests. B4 independent review #114 adds Scene integration requirements for actual
|
||||
lifetime extents, branch-local activation clipping, incomplete lanes and self arrows.
|
||||
- Codex-9e8r6t is a separate host with independent Cargo/native leases. It owns
|
||||
scenario workspace/B3/local behavior creation, palette and platform/packaging;
|
||||
current integration is not yet imported. Both hosts report direct push auth
|
||||
coherent workspace/package integration is imported, while newer named behavior
|
||||
creation and docs changes await transfer. Both hosts report direct push auth
|
||||
unavailable. MCP/anonymous fetch and verified bundle exchange remain usable.
|
||||
- Current Linux acceptance is open; this host has no installed WSL distribution.
|
||||
Historical Linux core/server/cross-build results have exact older snapshot scope.
|
||||
@@ -105,6 +111,13 @@ cannot establish completion.
|
||||
identities, local engineering edits and offline reproducibility across projects?
|
||||
- What migration and OA↔SA treatment follows from those contracts without guessing
|
||||
executable meaning from old strings or silently changing old models?
|
||||
- How can text-only creation establish library instance bases/maps, preserve
|
||||
compatibility across cosmetic package revisions, export subjectless cases, and
|
||||
transition mounted OA/SA data without hidden GUI normalization or silent forks?
|
||||
- Do explicit baseline values with one-level case overrides or complete per-case
|
||||
bindings better support repeated study maintenance and reproducible evaluation?
|
||||
- Which source-preserving refactoring/navigation and grammar changes reduce actual
|
||||
engineering effort while retaining stable identity and cross-file ownership?
|
||||
- Do current real gestures, exact caller return, nested scopes and lifecycle markers
|
||||
remain usable and correct under minimum sizing, scrolling, zoom and dirty drafts?
|
||||
- Which uncovered teaching, traceability, transition, saved-view, state/data, hosted
|
||||
@@ -127,6 +140,17 @@ versus analysis contexts; calculation definitions/applications; numeric/unit rul
|
||||
and copy, linked-definition, live-instance or pinned-definition/editable-instance
|
||||
library architectures. Require concrete falsifiers, source/API migration effects,
|
||||
identity/history/recovery behavior and independent critique before convergence.
|
||||
The completed analysis/library proposals and paired review remain unratified.
|
||||
An isolated executable text-only fixture admits without warnings and passes exact
|
||||
source/identity/rename/reparent/file-move/default checks. Separate baseline-versus-
|
||||
complete-case and anchored chooser experiments are active, with no production
|
||||
metamodel or selector integration implied.
|
||||
|
||||
The subsequent context experiment passed218 assertions: shared property baselines
|
||||
and one-level overrides reduce repeated input maintenance while retaining explicit
|
||||
independent freeze. Root selected that B direction for precise contract refinement;
|
||||
quantity/library/source details remain open. [Decision](DECISIONS.md),
|
||||
[experiment and limits](release-analysis-context-experiment-20260911.md).
|
||||
|
||||
## Decisions retained
|
||||
|
||||
@@ -160,7 +184,7 @@ identity/history/recovery behavior and independent critique before convergence.
|
||||
|
||||
## Current strategy
|
||||
|
||||
Finish the active local build and exact regression/native loop while separate
|
||||
Finish the GUI/native loop after the green full desktop suite while separate
|
||||
agents investigate uncertain foundations. Integrate only coherent, verified
|
||||
external checkpoints respecting ownership. Use independently constructed complete
|
||||
model/source oracles and exact snapshot comparison for identity/history. Ratify
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
# Analysis context experiment
|
||||
|
||||
This standalone Rust program compares explicit baseline/override studies (B) with complete independent case bindings (D). It is an isolated experiment, **not Studio syntax or a production model implementation**. Its expression language is deliberately limited to integer magnitudes in milliseconds, addition/sum, comparison, missing inputs and pure reusable functions.
|
||||
|
||||
The source owns the fixture generator, parser, explicit context resolver, dependency-cycle check, evaluator, frozen-snapshot operation, provenance observations and line-diff counter. All comparisons use the same 20 fixed inputs, 2 varying inputs and 20 named cases. The formula/check variants are either inline or factored into reusable pure definitions.
|
||||
|
||||
From the repository root, using the installed local toolchain:
|
||||
|
||||
```powershell
|
||||
. .local/toolchain/env.ps1
|
||||
New-Item -ItemType Directory -Force .local/analysis-context-20260911 | Out-Null
|
||||
rustc --edition=2024 -D warnings -C linker=clang.exe harness/experiments/analysis-context-20260911/main.rs -o .local/analysis-context-20260911/analysis-context.exe
|
||||
if ($LASTEXITCODE -ne 0) { throw 'Experiment compilation failed' }
|
||||
& .local/analysis-context-20260911/analysis-context.exe harness/experiments/analysis-context-20260911/generated
|
||||
if ($LASTEXITCODE -ne 0) { throw 'Experiment assertions failed' }
|
||||
```
|
||||
|
||||
The program overwrites its named generated fixtures/results in the output directory. It does not invoke Cargo, modify `target`, or import Studio modules. `EVIDENCE.json` was recorded separately after the verified run and contains exact compiler, program/executable/result hashes and every generated source fixture hash. Rerunning after editing the program requires refreshing that evidence rather than trusting the old manifest.
|
||||
|
||||
- [Results](generated/RESULTS.md): executed counts and assertions.
|
||||
- [Evidence](generated/EVIDENCE.json): final run identity and 29 fixture hashes.
|
||||
- [B with factored calculations](generated/B-factored.study) and [D equivalent](generated/D-factored.study).
|
||||
- [B case provenance](generated/B-factored-provenance.md).
|
||||
- [Frozen B case](generated/B-factored-frozen-case20.study): complete independent snapshot, copied definitions and explicit captured row origins.
|
||||
- [Interpretation and limitations](../../release-analysis-context-experiment-20260911.md).
|
||||
|
||||
The small dialect has explicit `study B/D revision`, a shared property catalog, optional pure `function` declarations, an explicit named `baseline` for B, and named cases declaring either `base engineering` or `independent`. `missing` is an entire binding hole. Removing a B override resolves the baseline; removing a required D row rejects. Function parameters cannot capture project properties. No case-to-case inheritance or implicit selected/default case exists.
|
||||
|
||||
Generated studies do not have OA/SA subjects, UUID identity, quantity kinds, persistent source editing, JSON/REST, library import resolution or native UI integration. The experiment compares context semantics and the actual emitted text size/edit count, not human completion time or end-to-end product conformance.
|
||||
+107
@@ -0,0 +1,107 @@
|
||||
study B revision 1
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
function budget_formula(result) = le(result, 22000)
|
||||
function total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02) = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
baseline engineering revision 1
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case01 base engineering
|
||||
end
|
||||
case case02 base engineering
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 base engineering
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 base engineering
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 base engineering
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 base engineering
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 base engineering
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 base engineering
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 base engineering
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 base engineering
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 base engineering
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 base engineering
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 base engineering
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 base engineering
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 base engineering
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 base engineering
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 base engineering
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 base engineering
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 base engineering
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 base engineering
|
||||
varying02 = 1475
|
||||
end
|
||||
+108
@@ -0,0 +1,108 @@
|
||||
study B revision 1
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
function budget_formula(result) = le(result, 22000)
|
||||
function total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02) = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
baseline engineering revision 1
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case01 base engineering
|
||||
end
|
||||
case case02 base engineering
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 base engineering
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 base engineering
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 base engineering
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 base engineering
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 base engineering
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 base engineering
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 base engineering
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 base engineering
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 base engineering
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 base engineering
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 base engineering
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 base engineering
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 base engineering
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 base engineering
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 base engineering
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 base engineering
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 base engineering
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 base engineering
|
||||
varying01 = total
|
||||
varying02 = 1475
|
||||
end
|
||||
@@ -0,0 +1,108 @@
|
||||
study B revision 2
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
function budget_formula(result) = le(result, 22000)
|
||||
function total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02) = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
baseline engineering revision 2
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case01 base engineering
|
||||
end
|
||||
case case02 base engineering
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 base engineering
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 base engineering
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 base engineering
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 base engineering
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 base engineering
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 base engineering
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 base engineering
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 base engineering
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 base engineering
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 base engineering
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 base engineering
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 base engineering
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 base engineering
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 base engineering
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 base engineering
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 base engineering
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 base engineering
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 base engineering
|
||||
varying01 = 1700
|
||||
varying02 = 1475
|
||||
end
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
study D revision 1
|
||||
origin B:case20:document1:engineering@1
|
||||
captured budget = baseline:engineering@1 via case20
|
||||
captured fixed01 = baseline:engineering@1 via case20
|
||||
captured fixed02 = baseline:engineering@1 via case20
|
||||
captured fixed03 = baseline:engineering@1 via case20
|
||||
captured fixed04 = baseline:engineering@1 via case20
|
||||
captured fixed05 = baseline:engineering@1 via case20
|
||||
captured fixed06 = baseline:engineering@1 via case20
|
||||
captured fixed07 = baseline:engineering@1 via case20
|
||||
captured fixed08 = baseline:engineering@1 via case20
|
||||
captured fixed09 = baseline:engineering@1 via case20
|
||||
captured fixed10 = baseline:engineering@1 via case20
|
||||
captured fixed11 = baseline:engineering@1 via case20
|
||||
captured fixed12 = baseline:engineering@1 via case20
|
||||
captured fixed13 = baseline:engineering@1 via case20
|
||||
captured fixed14 = baseline:engineering@1 via case20
|
||||
captured fixed15 = baseline:engineering@1 via case20
|
||||
captured fixed16 = baseline:engineering@1 via case20
|
||||
captured fixed17 = baseline:engineering@1 via case20
|
||||
captured fixed18 = baseline:engineering@1 via case20
|
||||
captured fixed19 = baseline:engineering@1 via case20
|
||||
captured fixed20 = baseline:engineering@1 via case20
|
||||
captured total = baseline:engineering@1 via case20
|
||||
captured varying01 = case:case20
|
||||
captured varying02 = case:case20
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
function budget_formula(result) = le(result, 22000)
|
||||
function total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02) = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
case case20 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1700
|
||||
varying02 = 1475
|
||||
end
|
||||
@@ -0,0 +1,108 @@
|
||||
study B revision 1
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
function budget_formula(result) = le(result, 22000)
|
||||
function total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02) = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
baseline engineering revision 1
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case01 base engineering
|
||||
end
|
||||
case case02 base engineering
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 base engineering
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 base engineering
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 base engineering
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 base engineering
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 base engineering
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 base engineering
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 base engineering
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 base engineering
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 base engineering
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 base engineering
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 base engineering
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 base engineering
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 base engineering
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 base engineering
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 base engineering
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 base engineering
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 base engineering
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 base engineering
|
||||
varying01 = missing
|
||||
varying02 = 1475
|
||||
end
|
||||
@@ -0,0 +1,31 @@
|
||||
# B-factored: case20 evaluation
|
||||
|
||||
Value: Bool(false)
|
||||
Document revision: 1
|
||||
|
||||
- budget: baseline:engineering@1 via case20
|
||||
- fixed01: baseline:engineering@1 via case20
|
||||
- fixed02: baseline:engineering@1 via case20
|
||||
- fixed03: baseline:engineering@1 via case20
|
||||
- fixed04: baseline:engineering@1 via case20
|
||||
- fixed05: baseline:engineering@1 via case20
|
||||
- fixed06: baseline:engineering@1 via case20
|
||||
- fixed07: baseline:engineering@1 via case20
|
||||
- fixed08: baseline:engineering@1 via case20
|
||||
- fixed09: baseline:engineering@1 via case20
|
||||
- fixed10: baseline:engineering@1 via case20
|
||||
- fixed11: baseline:engineering@1 via case20
|
||||
- fixed12: baseline:engineering@1 via case20
|
||||
- fixed13: baseline:engineering@1 via case20
|
||||
- fixed14: baseline:engineering@1 via case20
|
||||
- fixed15: baseline:engineering@1 via case20
|
||||
- fixed16: baseline:engineering@1 via case20
|
||||
- fixed17: baseline:engineering@1 via case20
|
||||
- fixed18: baseline:engineering@1 via case20
|
||||
- fixed19: baseline:engineering@1 via case20
|
||||
- fixed20: baseline:engineering@1 via case20
|
||||
- total: baseline:engineering@1 via case20
|
||||
- varying01: case:case20
|
||||
- varying02: case:case20
|
||||
|
||||
Rejected cycle: case20: cycle: budget -> total -> varying01 -> total
|
||||
@@ -0,0 +1,108 @@
|
||||
study B revision 2
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
function budget_formula(result) = le(result, 22500)
|
||||
function total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02) = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
baseline engineering revision 1
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case01 base engineering
|
||||
end
|
||||
case case02 base engineering
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 base engineering
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 base engineering
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 base engineering
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 base engineering
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 base engineering
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 base engineering
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 base engineering
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 base engineering
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 base engineering
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 base engineering
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 base engineering
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 base engineering
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 base engineering
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 base engineering
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 base engineering
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 base engineering
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 base engineering
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 base engineering
|
||||
varying01 = 1700
|
||||
varying02 = 1475
|
||||
end
|
||||
@@ -0,0 +1,108 @@
|
||||
study B revision 1
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
function budget_formula(result) = le(result, 22000)
|
||||
function total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02) = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
baseline engineering revision 1
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case01 base engineering
|
||||
end
|
||||
case case02 base engineering
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 base engineering
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 base engineering
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 base engineering
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 base engineering
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 base engineering
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 base engineering
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 base engineering
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 base engineering
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 base engineering
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 base engineering
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 base engineering
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 base engineering
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 base engineering
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 base engineering
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 base engineering
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 base engineering
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 base engineering
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 base engineering
|
||||
varying01 = 1700
|
||||
varying02 = 1475
|
||||
end
|
||||
+105
@@ -0,0 +1,105 @@
|
||||
study B revision 1
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
baseline engineering revision 1
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case01 base engineering
|
||||
end
|
||||
case case02 base engineering
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 base engineering
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 base engineering
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 base engineering
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 base engineering
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 base engineering
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 base engineering
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 base engineering
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 base engineering
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 base engineering
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 base engineering
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 base engineering
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 base engineering
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 base engineering
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 base engineering
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 base engineering
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 base engineering
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 base engineering
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 base engineering
|
||||
varying02 = 1475
|
||||
end
|
||||
+106
@@ -0,0 +1,106 @@
|
||||
study B revision 1
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
baseline engineering revision 1
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case01 base engineering
|
||||
end
|
||||
case case02 base engineering
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 base engineering
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 base engineering
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 base engineering
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 base engineering
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 base engineering
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 base engineering
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 base engineering
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 base engineering
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 base engineering
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 base engineering
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 base engineering
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 base engineering
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 base engineering
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 base engineering
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 base engineering
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 base engineering
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 base engineering
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 base engineering
|
||||
varying01 = total
|
||||
varying02 = 1475
|
||||
end
|
||||
@@ -0,0 +1,106 @@
|
||||
study B revision 2
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
baseline engineering revision 2
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case01 base engineering
|
||||
end
|
||||
case case02 base engineering
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 base engineering
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 base engineering
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 base engineering
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 base engineering
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 base engineering
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 base engineering
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 base engineering
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 base engineering
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 base engineering
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 base engineering
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 base engineering
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 base engineering
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 base engineering
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 base engineering
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 base engineering
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 base engineering
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 base engineering
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 base engineering
|
||||
varying01 = 1700
|
||||
varying02 = 1475
|
||||
end
|
||||
@@ -0,0 +1,53 @@
|
||||
study D revision 1
|
||||
origin B:case20:document1:engineering@1
|
||||
captured budget = baseline:engineering@1 via case20
|
||||
captured fixed01 = baseline:engineering@1 via case20
|
||||
captured fixed02 = baseline:engineering@1 via case20
|
||||
captured fixed03 = baseline:engineering@1 via case20
|
||||
captured fixed04 = baseline:engineering@1 via case20
|
||||
captured fixed05 = baseline:engineering@1 via case20
|
||||
captured fixed06 = baseline:engineering@1 via case20
|
||||
captured fixed07 = baseline:engineering@1 via case20
|
||||
captured fixed08 = baseline:engineering@1 via case20
|
||||
captured fixed09 = baseline:engineering@1 via case20
|
||||
captured fixed10 = baseline:engineering@1 via case20
|
||||
captured fixed11 = baseline:engineering@1 via case20
|
||||
captured fixed12 = baseline:engineering@1 via case20
|
||||
captured fixed13 = baseline:engineering@1 via case20
|
||||
captured fixed14 = baseline:engineering@1 via case20
|
||||
captured fixed15 = baseline:engineering@1 via case20
|
||||
captured fixed16 = baseline:engineering@1 via case20
|
||||
captured fixed17 = baseline:engineering@1 via case20
|
||||
captured fixed18 = baseline:engineering@1 via case20
|
||||
captured fixed19 = baseline:engineering@1 via case20
|
||||
captured fixed20 = baseline:engineering@1 via case20
|
||||
captured total = baseline:engineering@1 via case20
|
||||
captured varying01 = case:case20
|
||||
captured varying02 = case:case20
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
case case20 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1700
|
||||
varying02 = 1475
|
||||
end
|
||||
@@ -0,0 +1,106 @@
|
||||
study B revision 1
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
baseline engineering revision 1
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case01 base engineering
|
||||
end
|
||||
case case02 base engineering
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 base engineering
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 base engineering
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 base engineering
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 base engineering
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 base engineering
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 base engineering
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 base engineering
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 base engineering
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 base engineering
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 base engineering
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 base engineering
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 base engineering
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 base engineering
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 base engineering
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 base engineering
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 base engineering
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 base engineering
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 base engineering
|
||||
varying01 = missing
|
||||
varying02 = 1475
|
||||
end
|
||||
@@ -0,0 +1,31 @@
|
||||
# B-inline: case20 evaluation
|
||||
|
||||
Value: Bool(false)
|
||||
Document revision: 1
|
||||
|
||||
- budget: baseline:engineering@1 via case20
|
||||
- fixed01: baseline:engineering@1 via case20
|
||||
- fixed02: baseline:engineering@1 via case20
|
||||
- fixed03: baseline:engineering@1 via case20
|
||||
- fixed04: baseline:engineering@1 via case20
|
||||
- fixed05: baseline:engineering@1 via case20
|
||||
- fixed06: baseline:engineering@1 via case20
|
||||
- fixed07: baseline:engineering@1 via case20
|
||||
- fixed08: baseline:engineering@1 via case20
|
||||
- fixed09: baseline:engineering@1 via case20
|
||||
- fixed10: baseline:engineering@1 via case20
|
||||
- fixed11: baseline:engineering@1 via case20
|
||||
- fixed12: baseline:engineering@1 via case20
|
||||
- fixed13: baseline:engineering@1 via case20
|
||||
- fixed14: baseline:engineering@1 via case20
|
||||
- fixed15: baseline:engineering@1 via case20
|
||||
- fixed16: baseline:engineering@1 via case20
|
||||
- fixed17: baseline:engineering@1 via case20
|
||||
- fixed18: baseline:engineering@1 via case20
|
||||
- fixed19: baseline:engineering@1 via case20
|
||||
- fixed20: baseline:engineering@1 via case20
|
||||
- total: baseline:engineering@1 via case20
|
||||
- varying01: case:case20
|
||||
- varying02: case:case20
|
||||
|
||||
Rejected cycle: case20: cycle: budget -> total -> varying01 -> total
|
||||
@@ -0,0 +1,106 @@
|
||||
study B revision 2
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
baseline engineering revision 2
|
||||
budget = le(total, 22500)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case01 base engineering
|
||||
end
|
||||
case case02 base engineering
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 base engineering
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 base engineering
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 base engineering
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 base engineering
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 base engineering
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 base engineering
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 base engineering
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 base engineering
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 base engineering
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 base engineering
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 base engineering
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 base engineering
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 base engineering
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 base engineering
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 base engineering
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 base engineering
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 base engineering
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 base engineering
|
||||
varying01 = 1700
|
||||
varying02 = 1475
|
||||
end
|
||||
@@ -0,0 +1,106 @@
|
||||
study B revision 1
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
baseline engineering revision 1
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case01 base engineering
|
||||
end
|
||||
case case02 base engineering
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 base engineering
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 base engineering
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 base engineering
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 base engineering
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 base engineering
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 base engineering
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 base engineering
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 base engineering
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 base engineering
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 base engineering
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 base engineering
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 base engineering
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 base engineering
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 base engineering
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 base engineering
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 base engineering
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 base engineering
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 base engineering
|
||||
varying01 = 1700
|
||||
varying02 = 1475
|
||||
end
|
||||
+524
@@ -0,0 +1,524 @@
|
||||
study D revision 1
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
function budget_formula(result) = le(result, 22000)
|
||||
function total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02) = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
case case01 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case02 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = total
|
||||
varying02 = 1475
|
||||
end
|
||||
+523
@@ -0,0 +1,523 @@
|
||||
study D revision 1
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
function budget_formula(result) = le(result, 22000)
|
||||
function total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02) = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
case case01 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case02 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying02 = 1475
|
||||
end
|
||||
@@ -0,0 +1,524 @@
|
||||
study D revision 2
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
function budget_formula(result) = le(result, 22000)
|
||||
function total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02) = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
case case01 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case02 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1700
|
||||
varying02 = 1475
|
||||
end
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
study D revision 1
|
||||
origin D:case20:document1
|
||||
captured budget = case:case20
|
||||
captured fixed01 = case:case20
|
||||
captured fixed02 = case:case20
|
||||
captured fixed03 = case:case20
|
||||
captured fixed04 = case:case20
|
||||
captured fixed05 = case:case20
|
||||
captured fixed06 = case:case20
|
||||
captured fixed07 = case:case20
|
||||
captured fixed08 = case:case20
|
||||
captured fixed09 = case:case20
|
||||
captured fixed10 = case:case20
|
||||
captured fixed11 = case:case20
|
||||
captured fixed12 = case:case20
|
||||
captured fixed13 = case:case20
|
||||
captured fixed14 = case:case20
|
||||
captured fixed15 = case:case20
|
||||
captured fixed16 = case:case20
|
||||
captured fixed17 = case:case20
|
||||
captured fixed18 = case:case20
|
||||
captured fixed19 = case:case20
|
||||
captured fixed20 = case:case20
|
||||
captured total = case:case20
|
||||
captured varying01 = case:case20
|
||||
captured varying02 = case:case20
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
function budget_formula(result) = le(result, 22000)
|
||||
function total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02) = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
case case20 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1700
|
||||
varying02 = 1475
|
||||
end
|
||||
@@ -0,0 +1,524 @@
|
||||
study D revision 1
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
function budget_formula(result) = le(result, 22000)
|
||||
function total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02) = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
case case01 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case02 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = missing
|
||||
varying02 = 1475
|
||||
end
|
||||
@@ -0,0 +1,31 @@
|
||||
# D-factored: case20 evaluation
|
||||
|
||||
Value: Bool(false)
|
||||
Document revision: 1
|
||||
|
||||
- budget: case:case20
|
||||
- fixed01: case:case20
|
||||
- fixed02: case:case20
|
||||
- fixed03: case:case20
|
||||
- fixed04: case:case20
|
||||
- fixed05: case:case20
|
||||
- fixed06: case:case20
|
||||
- fixed07: case:case20
|
||||
- fixed08: case:case20
|
||||
- fixed09: case:case20
|
||||
- fixed10: case:case20
|
||||
- fixed11: case:case20
|
||||
- fixed12: case:case20
|
||||
- fixed13: case:case20
|
||||
- fixed14: case:case20
|
||||
- fixed15: case:case20
|
||||
- fixed16: case:case20
|
||||
- fixed17: case:case20
|
||||
- fixed18: case:case20
|
||||
- fixed19: case:case20
|
||||
- fixed20: case:case20
|
||||
- total: case:case20
|
||||
- varying01: case:case20
|
||||
- varying02: case:case20
|
||||
|
||||
Rejected cycle: case20: cycle: budget -> total -> varying01 -> total
|
||||
@@ -0,0 +1,524 @@
|
||||
study D revision 2
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
function budget_formula(result) = le(result, 22500)
|
||||
function total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02) = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
case case01 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case02 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1700
|
||||
varying02 = 1475
|
||||
end
|
||||
@@ -0,0 +1,524 @@
|
||||
study D revision 1
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
function budget_formula(result) = le(result, 22000)
|
||||
function total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02) = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
case case01 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case02 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 independent
|
||||
budget = budget_formula(total)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = total_formula(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1700
|
||||
varying02 = 1475
|
||||
end
|
||||
+522
@@ -0,0 +1,522 @@
|
||||
study D revision 1
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
case case01 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case02 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = total
|
||||
varying02 = 1475
|
||||
end
|
||||
+521
@@ -0,0 +1,521 @@
|
||||
study D revision 1
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
case case01 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case02 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying02 = 1475
|
||||
end
|
||||
@@ -0,0 +1,522 @@
|
||||
study D revision 2
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
case case01 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case02 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1700
|
||||
varying02 = 1475
|
||||
end
|
||||
+522
@@ -0,0 +1,522 @@
|
||||
study D revision 2
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
case case01 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1200
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case02 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1700
|
||||
varying02 = 1475
|
||||
end
|
||||
@@ -0,0 +1,53 @@
|
||||
study D revision 1
|
||||
origin D:case20:document1
|
||||
captured budget = case:case20
|
||||
captured fixed01 = case:case20
|
||||
captured fixed02 = case:case20
|
||||
captured fixed03 = case:case20
|
||||
captured fixed04 = case:case20
|
||||
captured fixed05 = case:case20
|
||||
captured fixed06 = case:case20
|
||||
captured fixed07 = case:case20
|
||||
captured fixed08 = case:case20
|
||||
captured fixed09 = case:case20
|
||||
captured fixed10 = case:case20
|
||||
captured fixed11 = case:case20
|
||||
captured fixed12 = case:case20
|
||||
captured fixed13 = case:case20
|
||||
captured fixed14 = case:case20
|
||||
captured fixed15 = case:case20
|
||||
captured fixed16 = case:case20
|
||||
captured fixed17 = case:case20
|
||||
captured fixed18 = case:case20
|
||||
captured fixed19 = case:case20
|
||||
captured fixed20 = case:case20
|
||||
captured total = case:case20
|
||||
captured varying01 = case:case20
|
||||
captured varying02 = case:case20
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
case case20 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1700
|
||||
varying02 = 1475
|
||||
end
|
||||
@@ -0,0 +1,522 @@
|
||||
study D revision 1
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
case case01 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case02 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = missing
|
||||
varying02 = 1475
|
||||
end
|
||||
@@ -0,0 +1,31 @@
|
||||
# D-inline: case20 evaluation
|
||||
|
||||
Value: Bool(false)
|
||||
Document revision: 1
|
||||
|
||||
- budget: case:case20
|
||||
- fixed01: case:case20
|
||||
- fixed02: case:case20
|
||||
- fixed03: case:case20
|
||||
- fixed04: case:case20
|
||||
- fixed05: case:case20
|
||||
- fixed06: case:case20
|
||||
- fixed07: case:case20
|
||||
- fixed08: case:case20
|
||||
- fixed09: case:case20
|
||||
- fixed10: case:case20
|
||||
- fixed11: case:case20
|
||||
- fixed12: case:case20
|
||||
- fixed13: case:case20
|
||||
- fixed14: case:case20
|
||||
- fixed15: case:case20
|
||||
- fixed16: case:case20
|
||||
- fixed17: case:case20
|
||||
- fixed18: case:case20
|
||||
- fixed19: case:case20
|
||||
- fixed20: case:case20
|
||||
- total: case:case20
|
||||
- varying01: case:case20
|
||||
- varying02: case:case20
|
||||
|
||||
Rejected cycle: case20: cycle: budget -> total -> varying01 -> total
|
||||
@@ -0,0 +1,522 @@
|
||||
study D revision 2
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
case case01 independent
|
||||
budget = le(total, 22500)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case02 independent
|
||||
budget = le(total, 22500)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 independent
|
||||
budget = le(total, 22500)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 independent
|
||||
budget = le(total, 22500)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 independent
|
||||
budget = le(total, 22500)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 independent
|
||||
budget = le(total, 22500)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 independent
|
||||
budget = le(total, 22500)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 independent
|
||||
budget = le(total, 22500)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 independent
|
||||
budget = le(total, 22500)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 independent
|
||||
budget = le(total, 22500)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 independent
|
||||
budget = le(total, 22500)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 independent
|
||||
budget = le(total, 22500)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 independent
|
||||
budget = le(total, 22500)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 independent
|
||||
budget = le(total, 22500)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 independent
|
||||
budget = le(total, 22500)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 independent
|
||||
budget = le(total, 22500)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 independent
|
||||
budget = le(total, 22500)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 independent
|
||||
budget = le(total, 22500)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 independent
|
||||
budget = le(total, 22500)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 independent
|
||||
budget = le(total, 22500)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1700
|
||||
varying02 = 1475
|
||||
end
|
||||
@@ -0,0 +1,522 @@
|
||||
study D revision 1
|
||||
properties fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02, total, budget
|
||||
case case01 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 750
|
||||
varying02 = 1000
|
||||
end
|
||||
case case02 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 800
|
||||
varying02 = 1025
|
||||
end
|
||||
case case03 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 850
|
||||
varying02 = 1050
|
||||
end
|
||||
case case04 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 900
|
||||
varying02 = 1075
|
||||
end
|
||||
case case05 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 950
|
||||
varying02 = 1100
|
||||
end
|
||||
case case06 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1000
|
||||
varying02 = 1125
|
||||
end
|
||||
case case07 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1050
|
||||
varying02 = 1150
|
||||
end
|
||||
case case08 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1100
|
||||
varying02 = 1175
|
||||
end
|
||||
case case09 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1150
|
||||
varying02 = 1200
|
||||
end
|
||||
case case10 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1200
|
||||
varying02 = 1225
|
||||
end
|
||||
case case11 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1250
|
||||
varying02 = 1250
|
||||
end
|
||||
case case12 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1300
|
||||
varying02 = 1275
|
||||
end
|
||||
case case13 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1350
|
||||
varying02 = 1300
|
||||
end
|
||||
case case14 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1400
|
||||
varying02 = 1325
|
||||
end
|
||||
case case15 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1450
|
||||
varying02 = 1350
|
||||
end
|
||||
case case16 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1500
|
||||
varying02 = 1375
|
||||
end
|
||||
case case17 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1550
|
||||
varying02 = 1400
|
||||
end
|
||||
case case18 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1600
|
||||
varying02 = 1425
|
||||
end
|
||||
case case19 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1650
|
||||
varying02 = 1450
|
||||
end
|
||||
case case20 independent
|
||||
budget = le(total, 22000)
|
||||
fixed01 = 1000
|
||||
fixed02 = 1000
|
||||
fixed03 = 1000
|
||||
fixed04 = 1000
|
||||
fixed05 = 1000
|
||||
fixed06 = 1000
|
||||
fixed07 = 1000
|
||||
fixed08 = 1000
|
||||
fixed09 = 1000
|
||||
fixed10 = 1000
|
||||
fixed11 = 1000
|
||||
fixed12 = 1000
|
||||
fixed13 = 1000
|
||||
fixed14 = 1000
|
||||
fixed15 = 1000
|
||||
fixed16 = 1000
|
||||
fixed17 = 1000
|
||||
fixed18 = 1000
|
||||
fixed19 = 1000
|
||||
fixed20 = 1000
|
||||
total = sum(fixed01, fixed02, fixed03, fixed04, fixed05, fixed06, fixed07, fixed08, fixed09, fixed10, fixed11, fixed12, fixed13, fixed14, fixed15, fixed16, fixed17, fixed18, fixed19, fixed20, varying01, varying02)
|
||||
varying01 = 1700
|
||||
varying02 = 1475
|
||||
end
|
||||
@@ -0,0 +1,166 @@
|
||||
{
|
||||
"recorded_utc": "2026-09-11T08:50:38.6429749Z",
|
||||
"compiler": [
|
||||
"rustc 1.98.1 (48a229cea 2026-09-01)",
|
||||
"binary: rustc",
|
||||
"commit-hash: 48a229ceaefd4985c50990b14116b6d856af0985",
|
||||
"commit-date: 2026-09-01",
|
||||
"host: x86_64-pc-windows-gnullvm",
|
||||
"release: 1.98.1",
|
||||
"LLVM version: 22.1.8"
|
||||
],
|
||||
"compile_command": "rustc --edition=2024 -D warnings -C linker=clang.exe harness/experiments/analysis-context-20260911/main.rs -o .local/analysis-context-20260911/analysis-context.exe",
|
||||
"run_command": ".local/analysis-context-20260911/analysis-context.exe harness/experiments/analysis-context-20260911/generated",
|
||||
"process_exit_code": 0,
|
||||
"assertions_passed": 218,
|
||||
"program_sha256": "5632ACAFD06413DCC9961DDC1ADE60C7556FB56B43ED3C667F5106E7559A3733",
|
||||
"executable_sha256": "36E2D5A7F0683CC19F2EB50CA4840F3A793A8350498E3E17EDD75710A78FC675",
|
||||
"results_sha256": "248419751E9B836CDE6D80F97202843DD5DC085D1BEC67CB2FCC5046960C143B",
|
||||
"fixture_hashes": [
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/B-factored-cleared-override.study",
|
||||
"sha256": "DD740295FB0F849A63815AE3174EB067616687A5D46BD63089A6AA279F9D48B8",
|
||||
"bytes": 2762
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/B-factored-cycle.rejected-study",
|
||||
"sha256": "4FF294ACA6EDBAD60CB6C899D2B1D93B8E07337A295DBC63876A4497DC9D58EA",
|
||||
"bytes": 2782
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/B-factored-fixed-all.study",
|
||||
"sha256": "A51BD1F3EF7153D67FB63EAB2B9906E9FFB0049A2179B47C632ABB3E9B01A0F4",
|
||||
"bytes": 2781
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/B-factored-frozen-case20.study",
|
||||
"sha256": "05370CCB21E0B0AB8F26F9704FBECA1BE44FA1156FBF6C8420E09C436D016476",
|
||||
"bytes": 2665
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/B-factored-missing.study",
|
||||
"sha256": "D6D1B53B307836275A417C3CB094881F91755D1FAD0D521CE9B90FE1FD8F039D",
|
||||
"bytes": 2784
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/B-factored-threshold.study",
|
||||
"sha256": "86C5DC5FCA452A9CD7FC13318D72BE81973802C13F878D488561551D27F62C67",
|
||||
"bytes": 2781
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/B-factored.study",
|
||||
"sha256": "0C2B9F055E4E6993A14688A0F58BD6629F724687DC694D7213166197B197B878",
|
||||
"bytes": 2781
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/B-inline-cleared-override.study",
|
||||
"sha256": "8FC77924459D892D1E91CF1756C708ED34005ED840F3A38B98474037BBEC4FA1",
|
||||
"bytes": 2262
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/B-inline-cycle.rejected-study",
|
||||
"sha256": "3D8249B3DDB21F36C765AF440F6DE0E9E7B125E6504A07BDD3BA83E7B94CE9E1",
|
||||
"bytes": 2282
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/B-inline-fixed-all.study",
|
||||
"sha256": "CD32AE6CDE2E21AFBB536109A9D2911ECC3572A9BE368C2D877EE3EB8F2D2303",
|
||||
"bytes": 2281
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/B-inline-frozen-case20.study",
|
||||
"sha256": "B09AF2449DD8E2DAEB5F0B4AE0FF9AC914227B6FE619B4B0139FEF0778B7FB7A",
|
||||
"bytes": 2165
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/B-inline-missing.study",
|
||||
"sha256": "0886DE0C602CCD06A7F7AC5C248C7EE9C5670C567880DCD3ED6D37E14C5AA524",
|
||||
"bytes": 2284
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/B-inline-threshold.study",
|
||||
"sha256": "54F518BCBB166264F763BC14AFA1437D4E95A3244DFE9DF0B0331591E72C85DD",
|
||||
"bytes": 2281
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/B-inline.study",
|
||||
"sha256": "87A97378550BB79DA9A0CAD453700352D9E24C289E6865BA9D8CF554C62FEE36",
|
||||
"bytes": 2281
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/D-factored-cycle.rejected-study",
|
||||
"sha256": "DAC04A19992313549D322D70DF564EF9026FBD5F30402DDA591AF579B7F70E26",
|
||||
"bytes": 14027
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/D-factored-deleted-row.rejected-study",
|
||||
"sha256": "C00EF4080857E18ADCC309FE57D512CA681E28A46E259B44A34D3852A334E973",
|
||||
"bytes": 14007
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/D-factored-fixed-all.study",
|
||||
"sha256": "D746830E424702ACE35B5A26EFE8D2E96D4D2CC028DC2B7E207E6326D0F22597",
|
||||
"bytes": 14026
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/D-factored-frozen-case20.study",
|
||||
"sha256": "804F0D3DB792659BFAA1CFB0CF96BF243C379F6971EC1FE357FE98CDF3269ED6",
|
||||
"bytes": 2167
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/D-factored-missing.study",
|
||||
"sha256": "32351A6F8BA499AAAD644FABFB08F7D6A067365394B2B6AD33EE7581A9761889",
|
||||
"bytes": 14029
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/D-factored-threshold.study",
|
||||
"sha256": "20EC6C0EB3EB599BE6354F2BED4BB0EF07747B4EE0B9CB80B757C59633A4579C",
|
||||
"bytes": 14026
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/D-factored.study",
|
||||
"sha256": "17C9CEB39E9B39D867EF732D4DE8BA36C00546BE1BC987547A52B99EEA83BE99",
|
||||
"bytes": 14026
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/D-inline-cycle.rejected-study",
|
||||
"sha256": "2C7443440051B7DD31733B7814C86FFC53BE5F7EBDFFE56925B9F9E60693FD84",
|
||||
"bytes": 13242
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/D-inline-deleted-row.rejected-study",
|
||||
"sha256": "26970B159D67A5E858298EC77C6B7FFA233EC3EF0FB903E9E860795DE829F28C",
|
||||
"bytes": 13222
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/D-inline-fixed-all.study",
|
||||
"sha256": "39AEC6A7457B4A8D9D9518B4B29A8185048811329B7614794FF69E122A972D6C",
|
||||
"bytes": 13241
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/D-inline-fixed-one-only.study",
|
||||
"sha256": "83E9F73E7E8CE4AC300979CE1D120707C4B7DD4A1D076C8D9BAB4BC8CF8230E8",
|
||||
"bytes": 13241
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/D-inline-frozen-case20.study",
|
||||
"sha256": "88A1A971651E827399775A7D9F6AAD32B7CE1C3E0F78D57E7AC72F207495E2B6",
|
||||
"bytes": 1667
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/D-inline-missing.study",
|
||||
"sha256": "8F44E9524A1BFCC96102C2C91CE15C4A87E698509225FD84D9A860EF8F7A23E6",
|
||||
"bytes": 13244
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/D-inline-threshold.study",
|
||||
"sha256": "59C77A7DF1488E96B994FE04A32A505B8DFC5F3F92C45A8BD774A043C1C2F5A0",
|
||||
"bytes": 13241
|
||||
},
|
||||
{
|
||||
"path": "harness/experiments/analysis-context-20260911/generated/D-inline.study",
|
||||
"sha256": "7A0FF1A4CCAD6B41344331182820AB6C6C7990DA09B842F8D04C60008A8D5232",
|
||||
"bytes": 13241
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
# Executed context experiment
|
||||
|
||||
All input magnitudes are integer milliseconds. This tiny dialect is not Studio source.
|
||||
|
||||
| Variant | Initial lines | Initial bytes | Binding rows | Fixed-all edit removed/added lines | Threshold edit removed/added lines | Initial passing cases | After fixed-all change |
|
||||
| --- | ---: | ---: | ---: | --- | --- | ---: | ---: |
|
||||
| B-inline | 106 | 2281 | 62 | 3/3 | 3/3 | 4 | 1 |
|
||||
| B-factored | 108 | 2781 | 62 | 3/3 | 2/2 | 4 | 1 |
|
||||
| D-inline | 522 | 13241 | 480 | 21/21 | 21/21 | 4 | 1 |
|
||||
| D-factored | 524 | 14026 | 480 | 21/21 | 2/2 | 4 | 1 |
|
||||
|
||||
Executed assertions: 218. All passed. Every accepted fixture was parsed, validated, rendered and parsed back with exact experiment AST equality. Rejected cases were checked separately.
|
||||
|
||||
Negative controls: D changing one repeated fixed input changes only that case; B evaluating inherited formulas against baseline inputs instead of effective case inputs gives 21,750 instead of case20's 23,175. A shallow B case copy is not frozen; factored D also needs its definition environment snapshotted. Clearing a B override restores its named baseline value, including an explicitly missing baseline. A deleted D binding row rejects. Baseline chains, recursive definitions and project captures inside pure functions reject.
|
||||
@@ -0,0 +1,913 @@
|
||||
//! Isolated context experiment. This is deliberately NOT Studio syntax or production code.
|
||||
use std::collections::{BTreeMap, BTreeSet};
|
||||
use std::fmt::Write as _;
|
||||
use std::path::Path;
|
||||
|
||||
type Bindings = BTreeMap<String, Expr>;
|
||||
type Functions = BTreeMap<String, Function>;
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
enum Expr {
|
||||
Int(i64),
|
||||
Missing,
|
||||
Ref(String),
|
||||
Sum(Vec<Expr>),
|
||||
Le(Box<Expr>, Box<Expr>),
|
||||
Call(String, Vec<Expr>),
|
||||
}
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
struct Function {
|
||||
parameters: Vec<String>,
|
||||
body: Expr,
|
||||
}
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
struct Baseline {
|
||||
name: String,
|
||||
revision: u64,
|
||||
bindings: Bindings,
|
||||
}
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
struct Case {
|
||||
name: String,
|
||||
base: Option<String>,
|
||||
bindings: Bindings,
|
||||
}
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
struct Study {
|
||||
mode: char,
|
||||
revision: u64,
|
||||
properties: Vec<String>,
|
||||
functions: Functions,
|
||||
baseline: Option<Baseline>,
|
||||
cases: Vec<Case>,
|
||||
origin: Option<String>,
|
||||
captured_origins: BTreeMap<String, String>,
|
||||
}
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
enum Value {
|
||||
Int(i64),
|
||||
Bool(bool),
|
||||
Missing(BTreeSet<String>),
|
||||
}
|
||||
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||
struct Observation {
|
||||
value: Value,
|
||||
origins: BTreeMap<String, String>,
|
||||
document_revision: u64,
|
||||
}
|
||||
|
||||
fn split_args(s: &str) -> Result<Vec<&str>, String> {
|
||||
if s.trim().is_empty() {
|
||||
return Ok(vec![]);
|
||||
}
|
||||
let mut depth = 0_i32;
|
||||
let mut start = 0;
|
||||
let mut out = vec![];
|
||||
for (i, ch) in s.char_indices() {
|
||||
match ch {
|
||||
'(' => depth += 1,
|
||||
')' => {
|
||||
depth -= 1;
|
||||
if depth < 0 {
|
||||
return Err("unbalanced expression".into());
|
||||
}
|
||||
}
|
||||
',' if depth == 0 => {
|
||||
out.push(s[start..i].trim());
|
||||
start = i + 1;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
if depth != 0 {
|
||||
return Err("unbalanced expression".into());
|
||||
}
|
||||
out.push(s[start..].trim());
|
||||
Ok(out)
|
||||
}
|
||||
fn expr(s: &str) -> Result<Expr, String> {
|
||||
let s = s.trim();
|
||||
if s == "missing" {
|
||||
return Ok(Expr::Missing);
|
||||
}
|
||||
if let Ok(n) = s.parse() {
|
||||
return Ok(Expr::Int(n));
|
||||
}
|
||||
if let Some(at) = s.find('(') {
|
||||
if !s.ends_with(')') {
|
||||
return Err("missing closing parenthesis".into());
|
||||
}
|
||||
let args = split_args(&s[at + 1..s.len() - 1])?
|
||||
.into_iter()
|
||||
.map(expr)
|
||||
.collect::<Result<Vec<_>, _>>()?;
|
||||
return match &s[..at] {
|
||||
"sum" => Ok(Expr::Sum(args)),
|
||||
"le" if args.len() == 2 => Ok(Expr::Le(
|
||||
Box::new(args[0].clone()),
|
||||
Box::new(args[1].clone()),
|
||||
)),
|
||||
"le" => Err("le requires two arguments".into()),
|
||||
name => Ok(Expr::Call(name.into(), args)),
|
||||
};
|
||||
}
|
||||
if s.is_empty() || !s.chars().all(|c| c.is_ascii_alphanumeric() || c == '_') {
|
||||
return Err(format!("invalid symbol {s}"));
|
||||
}
|
||||
Ok(Expr::Ref(s.into()))
|
||||
}
|
||||
fn spelling(e: &Expr) -> String {
|
||||
let list = |xs: &[Expr]| xs.iter().map(spelling).collect::<Vec<_>>().join(", ");
|
||||
match e {
|
||||
Expr::Int(v) => v.to_string(),
|
||||
Expr::Missing => "missing".into(),
|
||||
Expr::Ref(s) => s.clone(),
|
||||
Expr::Sum(xs) => format!("sum({})", list(xs)),
|
||||
Expr::Le(a, b) => format!("le({}, {})", spelling(a), spelling(b)),
|
||||
Expr::Call(name, xs) => format!("{name}({})", list(xs)),
|
||||
}
|
||||
}
|
||||
fn parse(text: &str) -> Result<Study, String> {
|
||||
let mut lines = text.lines().filter(|l| !l.trim().is_empty());
|
||||
let head = lines
|
||||
.next()
|
||||
.ok_or("empty study")?
|
||||
.split_whitespace()
|
||||
.collect::<Vec<_>>();
|
||||
if head.len() != 4
|
||||
|| head[0] != "study"
|
||||
|| head[2] != "revision"
|
||||
|| !matches!(head[1], "B" | "D")
|
||||
{
|
||||
return Err("invalid study header".into());
|
||||
}
|
||||
let mut study = Study {
|
||||
mode: head[1].chars().next().unwrap(),
|
||||
revision: head[3].parse().map_err(|_| "bad revision")?,
|
||||
properties: vec![],
|
||||
functions: BTreeMap::new(),
|
||||
baseline: None,
|
||||
cases: vec![],
|
||||
origin: None,
|
||||
captured_origins: BTreeMap::new(),
|
||||
};
|
||||
let mut current: Option<(bool, Case, u64)> = None;
|
||||
for line in lines {
|
||||
let line = line.trim();
|
||||
if line == "end" {
|
||||
let (base, item, revision) = current.take().ok_or("unmatched end")?;
|
||||
if base {
|
||||
if study.baseline.is_some() {
|
||||
return Err("multiple baselines forbidden".into());
|
||||
}
|
||||
study.baseline = Some(Baseline {
|
||||
name: item.name,
|
||||
revision,
|
||||
bindings: item.bindings,
|
||||
});
|
||||
} else {
|
||||
if study.cases.iter().any(|c| c.name == item.name) {
|
||||
return Err("duplicate case".into());
|
||||
}
|
||||
study.cases.push(item);
|
||||
}
|
||||
} else if let Some((_, case, _)) = current.as_mut() {
|
||||
let (name, value) = line.split_once(" = ").ok_or("expected binding")?;
|
||||
if case.bindings.insert(name.into(), expr(value)?).is_some() {
|
||||
return Err("duplicate binding".into());
|
||||
}
|
||||
} else if let Some(properties) = line.strip_prefix("properties ") {
|
||||
if !study.properties.is_empty() {
|
||||
return Err("duplicate properties".into());
|
||||
}
|
||||
study.properties = properties.split(", ").map(String::from).collect();
|
||||
} else if let Some(origin) = line.strip_prefix("origin ") {
|
||||
study.origin = Some(origin.into());
|
||||
} else if let Some(captured) = line.strip_prefix("captured ") {
|
||||
let (property, origin) = captured
|
||||
.split_once(" = ")
|
||||
.ok_or("invalid captured origin")?;
|
||||
if study
|
||||
.captured_origins
|
||||
.insert(property.into(), origin.into())
|
||||
.is_some()
|
||||
{
|
||||
return Err("duplicate captured origin".into());
|
||||
}
|
||||
} else if let Some(def) = line.strip_prefix("function ") {
|
||||
let (left, right) = def.split_once(" = ").ok_or("invalid function")?;
|
||||
let at = left.find('(').ok_or("function parameters required")?;
|
||||
if !left.ends_with(')') {
|
||||
return Err("bad parameters".into());
|
||||
}
|
||||
let f = Function {
|
||||
parameters: split_args(&left[at + 1..left.len() - 1])?
|
||||
.into_iter()
|
||||
.map(String::from)
|
||||
.collect(),
|
||||
body: expr(right)?,
|
||||
};
|
||||
if study.functions.insert(left[..at].into(), f).is_some() {
|
||||
return Err("duplicate function".into());
|
||||
}
|
||||
} else {
|
||||
let words = line.split_whitespace().collect::<Vec<_>>();
|
||||
let (base, name, parent, revision) = match words.as_slice() {
|
||||
["baseline", name, "revision", revision] => (
|
||||
true,
|
||||
*name,
|
||||
None,
|
||||
revision.parse().map_err(|_| "bad baseline revision")?,
|
||||
),
|
||||
["case", name, "base", parent] => (false, *name, Some((*parent).to_owned()), 0),
|
||||
["case", name, "independent"] => (false, *name, None, 0),
|
||||
_ => return Err(format!("invalid declaration: {line}")),
|
||||
};
|
||||
current = Some((
|
||||
base,
|
||||
Case {
|
||||
name: name.into(),
|
||||
base: parent,
|
||||
bindings: BTreeMap::new(),
|
||||
},
|
||||
revision,
|
||||
));
|
||||
}
|
||||
}
|
||||
if current.is_some() {
|
||||
return Err("unterminated block".into());
|
||||
}
|
||||
validate(&study)?;
|
||||
Ok(study)
|
||||
}
|
||||
fn render(s: &Study) -> String {
|
||||
let mut text = format!("study {} revision {}\n", s.mode, s.revision);
|
||||
if let Some(origin) = &s.origin {
|
||||
writeln!(text, "origin {origin}").unwrap();
|
||||
}
|
||||
for (property, origin) in &s.captured_origins {
|
||||
writeln!(text, "captured {property} = {origin}").unwrap();
|
||||
}
|
||||
writeln!(text, "properties {}", s.properties.join(", ")).unwrap();
|
||||
for (name, f) in &s.functions {
|
||||
writeln!(
|
||||
text,
|
||||
"function {name}({}) = {}",
|
||||
f.parameters.join(", "),
|
||||
spelling(&f.body)
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
let write_bindings = |text: &mut String, bindings: &Bindings| {
|
||||
for (p, e) in bindings {
|
||||
writeln!(text, " {p} = {}", spelling(e)).unwrap();
|
||||
}
|
||||
text.push_str("end\n");
|
||||
};
|
||||
if let Some(b) = &s.baseline {
|
||||
writeln!(text, "baseline {} revision {}", b.name, b.revision).unwrap();
|
||||
write_bindings(&mut text, &b.bindings);
|
||||
}
|
||||
for c in &s.cases {
|
||||
writeln!(
|
||||
text,
|
||||
"case {} {}",
|
||||
c.name,
|
||||
c.base
|
||||
.as_ref()
|
||||
.map_or("independent".into(), |b| format!("base {b}"))
|
||||
)
|
||||
.unwrap();
|
||||
write_bindings(&mut text, &c.bindings);
|
||||
}
|
||||
text
|
||||
}
|
||||
fn refs(e: &Expr, names: &mut BTreeSet<String>, calls: &mut BTreeSet<String>) {
|
||||
match e {
|
||||
Expr::Ref(p) => {
|
||||
names.insert(p.clone());
|
||||
}
|
||||
Expr::Sum(xs) | Expr::Call(_, xs) => {
|
||||
if let Expr::Call(f, _) = e {
|
||||
calls.insert(f.clone());
|
||||
}
|
||||
for x in xs {
|
||||
refs(x, names, calls);
|
||||
}
|
||||
}
|
||||
Expr::Le(a, b) => {
|
||||
refs(a, names, calls);
|
||||
refs(b, names, calls);
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
fn acyclic(graph: &BTreeMap<String, BTreeSet<String>>) -> Result<(), String> {
|
||||
fn visit(
|
||||
n: &str,
|
||||
graph: &BTreeMap<String, BTreeSet<String>>,
|
||||
path: &mut Vec<String>,
|
||||
done: &mut BTreeSet<String>,
|
||||
) -> Result<(), String> {
|
||||
if path.iter().any(|p| p == n) {
|
||||
path.push(n.into());
|
||||
return Err(format!("cycle: {}", path.join(" -> ")));
|
||||
}
|
||||
if done.contains(n) {
|
||||
return Ok(());
|
||||
}
|
||||
path.push(n.into());
|
||||
for next in graph
|
||||
.get(n)
|
||||
.ok_or_else(|| format!("unknown dependency {n}"))?
|
||||
{
|
||||
visit(next, graph, path, done)?;
|
||||
}
|
||||
path.pop();
|
||||
done.insert(n.into());
|
||||
Ok(())
|
||||
}
|
||||
let mut done = BTreeSet::new();
|
||||
for n in graph.keys() {
|
||||
visit(n, graph, &mut vec![], &mut done)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
fn resolved<'a>(s: &'a Study, c: &'a Case, property: &str) -> Result<(&'a Expr, String), String> {
|
||||
if let Some(e) = c.bindings.get(property) {
|
||||
return Ok((e, format!("case:{}", c.name)));
|
||||
}
|
||||
if let Some(base) = &c.base {
|
||||
let b = s
|
||||
.baseline
|
||||
.as_ref()
|
||||
.filter(|b| &b.name == base)
|
||||
.ok_or("unknown baseline")?;
|
||||
if let Some(e) = b.bindings.get(property) {
|
||||
return Ok((
|
||||
e,
|
||||
format!("baseline:{}@{} via {}", b.name, b.revision, c.name),
|
||||
));
|
||||
}
|
||||
}
|
||||
Err(format!("missing binding row: {}.{property}", c.name))
|
||||
}
|
||||
fn validate(s: &Study) -> Result<(), String> {
|
||||
let properties = s.properties.iter().cloned().collect::<BTreeSet<_>>();
|
||||
if properties.len() != s.properties.len() || properties.is_empty() {
|
||||
return Err("invalid property catalog".into());
|
||||
}
|
||||
if (s.mode == 'B') != s.baseline.is_some() {
|
||||
return Err("B requires one explicit baseline; D forbids baselines".into());
|
||||
}
|
||||
let mut function_graph = BTreeMap::new();
|
||||
for (name, f) in &s.functions {
|
||||
let mut names = BTreeSet::new();
|
||||
let mut calls = BTreeSet::new();
|
||||
refs(&f.body, &mut names, &mut calls);
|
||||
let parameters = f.parameters.iter().cloned().collect::<BTreeSet<_>>();
|
||||
if parameters.len() != f.parameters.len() || !names.is_subset(¶meters) {
|
||||
return Err(format!("function {name} captures unknown/project property"));
|
||||
}
|
||||
function_graph.insert(name.clone(), calls);
|
||||
}
|
||||
acyclic(&function_graph)?;
|
||||
let mut contexts = s.cases.clone();
|
||||
if let Some(b) = &s.baseline {
|
||||
contexts.push(Case {
|
||||
name: format!("baseline_{}", b.name),
|
||||
base: None,
|
||||
bindings: b.bindings.clone(),
|
||||
});
|
||||
}
|
||||
for c in &contexts {
|
||||
if !c.bindings.keys().all(|p| properties.contains(p)) {
|
||||
return Err("unknown binding property".into());
|
||||
}
|
||||
if s.mode == 'D' && c.base.is_some() {
|
||||
return Err("D case cannot inherit".into());
|
||||
}
|
||||
if let Some(name) = &c.base {
|
||||
if s.baseline.as_ref().is_none_or(|b| &b.name != name) {
|
||||
return Err("unknown baseline; case-to-case inheritance forbidden".into());
|
||||
}
|
||||
}
|
||||
let mut graph = BTreeMap::new();
|
||||
for p in &properties {
|
||||
let (e, _) = resolved(s, c, p)?;
|
||||
let mut names = BTreeSet::new();
|
||||
let mut calls = BTreeSet::new();
|
||||
refs(e, &mut names, &mut calls);
|
||||
if !names.is_subset(&properties) || !calls.iter().all(|f| s.functions.contains_key(f)) {
|
||||
return Err("unknown reference".into());
|
||||
}
|
||||
graph.insert(p.clone(), names);
|
||||
}
|
||||
acyclic(&graph).map_err(|e| format!("{}: {e}", c.name))?;
|
||||
for p in &properties {
|
||||
evaluate(s, c, p)?;
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
fn evaluate(s: &Study, c: &Case, property: &str) -> Result<Observation, String> {
|
||||
let mut origins = BTreeMap::new();
|
||||
let mut cache = BTreeMap::new();
|
||||
fn property_value(
|
||||
s: &Study,
|
||||
c: &Case,
|
||||
p: &str,
|
||||
origins: &mut BTreeMap<String, String>,
|
||||
cache: &mut BTreeMap<String, Value>,
|
||||
) -> Result<Value, String> {
|
||||
if let Some(v) = cache.get(p) {
|
||||
return Ok(v.clone());
|
||||
}
|
||||
let (e, origin) = resolved(s, c, p)?;
|
||||
origins.insert(
|
||||
p.into(),
|
||||
s.captured_origins
|
||||
.get(p)
|
||||
.map_or(origin, |old| format!("frozen:{old}")),
|
||||
);
|
||||
let value = run(s, c, e, &BTreeMap::new(), Some(p), origins, cache)?;
|
||||
if !matches!(value, Value::Missing(_)) && (p == "budget") != matches!(value, Value::Bool(_))
|
||||
{
|
||||
return Err(format!("wrong type for {p}"));
|
||||
}
|
||||
cache.insert(p.into(), value.clone());
|
||||
Ok(value)
|
||||
}
|
||||
fn run(
|
||||
s: &Study,
|
||||
c: &Case,
|
||||
e: &Expr,
|
||||
params: &BTreeMap<String, Value>,
|
||||
missing_property: Option<&str>,
|
||||
origins: &mut BTreeMap<String, String>,
|
||||
cache: &mut BTreeMap<String, Value>,
|
||||
) -> Result<Value, String> {
|
||||
match e {
|
||||
Expr::Int(n) => Ok(Value::Int(*n)),
|
||||
Expr::Missing => Ok(Value::Missing(BTreeSet::from([missing_property
|
||||
.unwrap_or("function-body")
|
||||
.into()]))),
|
||||
Expr::Ref(p) => params
|
||||
.get(p)
|
||||
.cloned()
|
||||
.map_or_else(|| property_value(s, c, p, origins, cache), Ok),
|
||||
Expr::Call(name, args) => {
|
||||
let f = s.functions.get(name).ok_or("unknown function")?;
|
||||
if f.parameters.len() != args.len() {
|
||||
return Err("wrong function arity".into());
|
||||
}
|
||||
let mut bound = BTreeMap::new();
|
||||
for (parameter, arg) in f.parameters.iter().zip(args) {
|
||||
bound.insert(
|
||||
parameter.clone(),
|
||||
run(s, c, arg, params, missing_property, origins, cache)?,
|
||||
);
|
||||
}
|
||||
run(s, c, &f.body, &bound, missing_property, origins, cache)
|
||||
}
|
||||
Expr::Sum(xs) => {
|
||||
let mut total = 0_i64;
|
||||
let mut missing = BTreeSet::new();
|
||||
for x in xs {
|
||||
match run(s, c, x, params, missing_property, origins, cache)? {
|
||||
Value::Int(n) => total = total.checked_add(n).ok_or("integer overflow")?,
|
||||
Value::Missing(m) => missing.extend(m),
|
||||
Value::Bool(_) => return Err("sum requires numeric inputs".into()),
|
||||
}
|
||||
}
|
||||
Ok(if missing.is_empty() {
|
||||
Value::Int(total)
|
||||
} else {
|
||||
Value::Missing(missing)
|
||||
})
|
||||
}
|
||||
Expr::Le(a, b) => {
|
||||
let a = run(s, c, a, params, missing_property, origins, cache)?;
|
||||
let b = run(s, c, b, params, missing_property, origins, cache)?;
|
||||
match (a, b) {
|
||||
(Value::Int(a), Value::Int(b)) => Ok(Value::Bool(a <= b)),
|
||||
(Value::Missing(mut a), Value::Missing(b)) => {
|
||||
a.extend(b);
|
||||
Ok(Value::Missing(a))
|
||||
}
|
||||
(Value::Missing(a), Value::Int(_)) | (Value::Int(_), Value::Missing(a)) => {
|
||||
Ok(Value::Missing(a))
|
||||
}
|
||||
_ => Err("le requires numeric inputs".into()),
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
let value = property_value(s, c, property, &mut origins, &mut cache)?;
|
||||
Ok(Observation {
|
||||
value,
|
||||
origins,
|
||||
document_revision: s.revision,
|
||||
})
|
||||
}
|
||||
fn fixture(mode: char, factored: bool) -> Study {
|
||||
let inputs = (1..=20)
|
||||
.map(|i| format!("fixed{i:02}"))
|
||||
.chain(["varying01".into(), "varying02".into()])
|
||||
.collect::<Vec<_>>();
|
||||
let mut all = inputs.clone();
|
||||
all.extend(["total".into(), "budget".into()]);
|
||||
let mut bindings = (1..=20)
|
||||
.map(|i| (format!("fixed{i:02}"), Expr::Int(1000)))
|
||||
.collect::<Bindings>();
|
||||
bindings.insert("varying01".into(), Expr::Int(750));
|
||||
bindings.insert("varying02".into(), Expr::Int(1000));
|
||||
let total = Expr::Sum(inputs.iter().cloned().map(Expr::Ref).collect());
|
||||
let check = Expr::Le(
|
||||
Box::new(Expr::Ref("total".into())),
|
||||
Box::new(Expr::Int(22000)),
|
||||
);
|
||||
let mut functions = BTreeMap::new();
|
||||
if factored {
|
||||
functions.insert(
|
||||
"total_formula".into(),
|
||||
Function {
|
||||
parameters: inputs.clone(),
|
||||
body: total,
|
||||
},
|
||||
);
|
||||
functions.insert(
|
||||
"budget_formula".into(),
|
||||
Function {
|
||||
parameters: vec!["result".into()],
|
||||
body: Expr::Le(
|
||||
Box::new(Expr::Ref("result".into())),
|
||||
Box::new(Expr::Int(22000)),
|
||||
),
|
||||
},
|
||||
);
|
||||
bindings.insert(
|
||||
"total".into(),
|
||||
Expr::Call(
|
||||
"total_formula".into(),
|
||||
inputs.into_iter().map(Expr::Ref).collect(),
|
||||
),
|
||||
);
|
||||
bindings.insert(
|
||||
"budget".into(),
|
||||
Expr::Call("budget_formula".into(), vec![Expr::Ref("total".into())]),
|
||||
);
|
||||
} else {
|
||||
bindings.insert("total".into(), total);
|
||||
bindings.insert("budget".into(), check);
|
||||
}
|
||||
let cases = (0..20)
|
||||
.map(|i| {
|
||||
let mut rows = if mode == 'D' {
|
||||
bindings.clone()
|
||||
} else {
|
||||
BTreeMap::new()
|
||||
};
|
||||
if mode == 'D' || i != 0 {
|
||||
rows.insert("varying01".into(), Expr::Int(750 + 50 * i));
|
||||
rows.insert("varying02".into(), Expr::Int(1000 + 25 * i));
|
||||
}
|
||||
Case {
|
||||
name: format!("case{:02}", i + 1),
|
||||
base: (mode == 'B').then(|| "engineering".into()),
|
||||
bindings: rows,
|
||||
}
|
||||
})
|
||||
.collect();
|
||||
Study {
|
||||
mode,
|
||||
revision: 1,
|
||||
properties: all,
|
||||
functions,
|
||||
baseline: (mode == 'B').then(|| Baseline {
|
||||
name: "engineering".into(),
|
||||
revision: 1,
|
||||
bindings,
|
||||
}),
|
||||
cases,
|
||||
origin: None,
|
||||
captured_origins: BTreeMap::new(),
|
||||
}
|
||||
}
|
||||
fn freeze(s: &Study, case: usize) -> Study {
|
||||
let c = &s.cases[case];
|
||||
Study {
|
||||
mode: 'D',
|
||||
revision: 1,
|
||||
properties: s.properties.clone(),
|
||||
functions: s.functions.clone(),
|
||||
baseline: None,
|
||||
cases: vec![Case {
|
||||
name: c.name.clone(),
|
||||
base: None,
|
||||
bindings: s
|
||||
.properties
|
||||
.iter()
|
||||
.map(|p| (p.clone(), resolved(s, c, p).unwrap().0.clone()))
|
||||
.collect(),
|
||||
}],
|
||||
origin: Some(format!(
|
||||
"{}:{}:document{}{}",
|
||||
s.mode,
|
||||
c.name,
|
||||
s.revision,
|
||||
s.baseline
|
||||
.as_ref()
|
||||
.map_or(String::new(), |b| format!(":{}@{}", b.name, b.revision))
|
||||
)),
|
||||
captured_origins: s
|
||||
.properties
|
||||
.iter()
|
||||
.map(|p| (p.clone(), resolved(s, c, p).unwrap().1))
|
||||
.collect(),
|
||||
}
|
||||
}
|
||||
fn write_fixture(dir: &Path, name: &str, s: &Study) -> Result<String, String> {
|
||||
let source = render(s);
|
||||
let back = parse(&source)?;
|
||||
assert_eq!(&back, s, "exact experiment AST round trip");
|
||||
std::fs::write(dir.join(format!("{name}.study")), &source).map_err(|e| e.to_string())?;
|
||||
Ok(source)
|
||||
}
|
||||
fn diff(before: &str, after: &str) -> (usize, usize) {
|
||||
let a = before.lines().collect::<Vec<_>>();
|
||||
let b = after.lines().collect::<Vec<_>>();
|
||||
let mut row = vec![0; b.len() + 1];
|
||||
for x in &a {
|
||||
let mut diagonal = 0;
|
||||
for (j, y) in b.iter().enumerate() {
|
||||
let old = row[j + 1];
|
||||
row[j + 1] = if x == y {
|
||||
diagonal + 1
|
||||
} else {
|
||||
row[j + 1].max(row[j])
|
||||
};
|
||||
diagonal = old;
|
||||
}
|
||||
}
|
||||
(a.len() - row[b.len()], b.len() - row[b.len()])
|
||||
}
|
||||
fn assert_total(s: &Study, index: usize, expected: i64) {
|
||||
assert_eq!(
|
||||
evaluate(s, &s.cases[index], "total").unwrap().value,
|
||||
Value::Int(expected)
|
||||
);
|
||||
}
|
||||
fn change_fixed(s: &mut Study, all: bool) {
|
||||
s.revision += 1;
|
||||
if let Some(b) = s.baseline.as_mut() {
|
||||
b.revision += 1;
|
||||
b.bindings.insert("fixed01".into(), Expr::Int(1200));
|
||||
} else {
|
||||
for c in s.cases.iter_mut().take(if all { 20 } else { 1 }) {
|
||||
c.bindings.insert("fixed01".into(), Expr::Int(1200));
|
||||
}
|
||||
}
|
||||
}
|
||||
fn change_threshold(s: &mut Study, value: i64) {
|
||||
s.revision += 1;
|
||||
if let Some(f) = s.functions.get_mut("budget_formula") {
|
||||
f.body = Expr::Le(
|
||||
Box::new(Expr::Ref("result".into())),
|
||||
Box::new(Expr::Int(value)),
|
||||
);
|
||||
} else {
|
||||
let e = Expr::Le(
|
||||
Box::new(Expr::Ref("total".into())),
|
||||
Box::new(Expr::Int(value)),
|
||||
);
|
||||
if let Some(b) = s.baseline.as_mut() {
|
||||
b.revision += 1;
|
||||
b.bindings.insert("budget".into(), e);
|
||||
} else {
|
||||
for c in &mut s.cases {
|
||||
c.bindings.insert("budget".into(), e.clone());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
fn pass_count(s: &Study) -> usize {
|
||||
s.cases
|
||||
.iter()
|
||||
.filter(|c| evaluate(s, c, "budget").unwrap().value == Value::Bool(true))
|
||||
.count()
|
||||
}
|
||||
|
||||
fn main() -> Result<(), String> {
|
||||
let out = std::env::args()
|
||||
.nth(1)
|
||||
.ok_or("usage: analysis-context.exe OUTPUT_DIRECTORY")?;
|
||||
let dir = Path::new(&out);
|
||||
std::fs::create_dir_all(dir).map_err(|e| e.to_string())?;
|
||||
let mut report = String::from(
|
||||
"# Executed context experiment\n\nAll input magnitudes are integer milliseconds. This tiny dialect is not Studio source.\n\n| Variant | Initial lines | Initial bytes | Binding rows | Fixed-all edit removed/added lines | Threshold edit removed/added lines | Initial passing cases | After fixed-all change |\n| --- | ---: | ---: | ---: | --- | --- | ---: | ---: |\n",
|
||||
);
|
||||
let mut checks = 0;
|
||||
for mode in ['B', 'D'] {
|
||||
for factored in [false, true] {
|
||||
let name = format!("{mode}-{}", if factored { "factored" } else { "inline" });
|
||||
let original = fixture(mode, factored);
|
||||
validate(&original)?;
|
||||
for i in 0..20 {
|
||||
assert_total(&original, i, 21750 + 75 * i as i64);
|
||||
checks += 1;
|
||||
}
|
||||
assert_eq!(pass_count(&original), 4);
|
||||
checks += 1;
|
||||
let initial = write_fixture(dir, &name, &original)?;
|
||||
let mut changed = original.clone();
|
||||
change_fixed(&mut changed, true);
|
||||
validate(&changed)?;
|
||||
for i in 0..20 {
|
||||
assert_total(&changed, i, 21950 + 75 * i as i64);
|
||||
checks += 1;
|
||||
}
|
||||
assert_eq!(pass_count(&changed), 1);
|
||||
checks += 1;
|
||||
let fixed_source = write_fixture(dir, &format!("{name}-fixed-all"), &changed)?;
|
||||
let mut threshold = original.clone();
|
||||
change_threshold(&mut threshold, 22500);
|
||||
validate(&threshold)?;
|
||||
assert_eq!(pass_count(&threshold), 11);
|
||||
checks += 1;
|
||||
let threshold_source = write_fixture(dir, &format!("{name}-threshold"), &threshold)?;
|
||||
let frozen = freeze(&original, 19);
|
||||
let frozen_before = evaluate(&frozen, &frozen.cases[0], "budget")?;
|
||||
assert_total(&frozen, 0, 23175);
|
||||
checks += 1;
|
||||
change_threshold(&mut changed, 25000);
|
||||
assert_eq!(
|
||||
evaluate(&frozen, &frozen.cases[0], "budget")?,
|
||||
frozen_before
|
||||
);
|
||||
checks += 1;
|
||||
write_fixture(dir, &format!("{name}-frozen-case20"), &frozen)?;
|
||||
// A shallow case copy still follows its baseline and/or shared function environment.
|
||||
let shallow = original.cases[19].clone();
|
||||
if mode == 'B' {
|
||||
assert_eq!(
|
||||
evaluate(&changed, &shallow, "total")?.value,
|
||||
Value::Int(23375)
|
||||
);
|
||||
checks += 1;
|
||||
}
|
||||
if factored {
|
||||
assert_eq!(
|
||||
evaluate(&changed, &shallow, "budget")?.value,
|
||||
Value::Bool(true)
|
||||
);
|
||||
checks += 1;
|
||||
}
|
||||
if mode == 'D' && !factored {
|
||||
assert_eq!(
|
||||
evaluate(&changed, &shallow, "total")?.value,
|
||||
Value::Int(23175)
|
||||
);
|
||||
assert_eq!(
|
||||
evaluate(&changed, &shallow, "budget")?.value,
|
||||
Value::Bool(false)
|
||||
);
|
||||
checks += 2;
|
||||
}
|
||||
assert_eq!(frozen.captured_origins.len(), 24);
|
||||
assert!(
|
||||
evaluate(&frozen, &frozen.cases[0], "total")?
|
||||
.origins
|
||||
.values()
|
||||
.all(|origin| origin.starts_with("frozen:"))
|
||||
);
|
||||
checks += 2;
|
||||
let mut missing = original.clone();
|
||||
missing.cases[19]
|
||||
.bindings
|
||||
.insert("varying01".into(), Expr::Missing);
|
||||
validate(&missing)?;
|
||||
assert_eq!(
|
||||
evaluate(&missing, &missing.cases[19], "budget")?.value,
|
||||
Value::Missing(BTreeSet::from(["varying01".into()]))
|
||||
);
|
||||
checks += 1;
|
||||
write_fixture(dir, &format!("{name}-missing"), &missing)?;
|
||||
let frozen_missing = freeze(&missing, 19);
|
||||
assert_eq!(
|
||||
evaluate(&frozen_missing, &frozen_missing.cases[0], "budget")?.value,
|
||||
Value::Missing(BTreeSet::from(["varying01".into()]))
|
||||
);
|
||||
checks += 1;
|
||||
missing.cases[19].bindings.remove("varying01");
|
||||
if mode == 'B' {
|
||||
validate(&missing)?;
|
||||
assert_total(&missing, 19, 22225);
|
||||
checks += 1;
|
||||
write_fixture(dir, &format!("{name}-cleared-override"), &missing)?;
|
||||
} else {
|
||||
assert!(
|
||||
validate(&missing)
|
||||
.unwrap_err()
|
||||
.contains("missing binding row")
|
||||
);
|
||||
checks += 1;
|
||||
std::fs::write(
|
||||
dir.join(format!("{name}-deleted-row.rejected-study")),
|
||||
render(&missing),
|
||||
)
|
||||
.map_err(|e| e.to_string())?;
|
||||
}
|
||||
let mut cyclic = original.clone();
|
||||
cyclic.cases[19]
|
||||
.bindings
|
||||
.insert("varying01".into(), Expr::Ref("total".into()));
|
||||
let cycle = validate(&cyclic).unwrap_err();
|
||||
assert!(cycle.contains("cycle"));
|
||||
checks += 1;
|
||||
std::fs::write(
|
||||
dir.join(format!("{name}-cycle.rejected-study")),
|
||||
render(&cyclic),
|
||||
)
|
||||
.map_err(|e| e.to_string())?;
|
||||
let observation = evaluate(&original, &original.cases[19], "budget")?;
|
||||
let mut detail = format!(
|
||||
"# {name}: case20 evaluation\n\nValue: {:?}\nDocument revision: {}\n\n",
|
||||
observation.value, observation.document_revision
|
||||
);
|
||||
for (p, origin) in &observation.origins {
|
||||
writeln!(detail, "- {p}: {origin}").unwrap();
|
||||
}
|
||||
writeln!(detail, "\nRejected cycle: {cycle}").unwrap();
|
||||
std::fs::write(dir.join(format!("{name}-provenance.md")), detail)
|
||||
.map_err(|e| e.to_string())?;
|
||||
let rows = original.baseline.as_ref().map_or(0, |b| b.bindings.len())
|
||||
+ original
|
||||
.cases
|
||||
.iter()
|
||||
.map(|c| c.bindings.len())
|
||||
.sum::<usize>();
|
||||
let (a, b) = diff(&initial, &fixed_source);
|
||||
let (c, d) = diff(&initial, &threshold_source);
|
||||
writeln!(
|
||||
report,
|
||||
"| {name} | {} | {} | {rows} | {a}/{b} | {c}/{d} | 4 | 1 |",
|
||||
initial.lines().count(),
|
||||
initial.len()
|
||||
)
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
// Negative controls establish that source locality and isolation differ.
|
||||
let mut d = fixture('D', false);
|
||||
change_fixed(&mut d, false);
|
||||
validate(&d)?;
|
||||
assert_total(&d, 0, 21950);
|
||||
assert_total(&d, 19, 23175);
|
||||
checks += 2;
|
||||
write_fixture(dir, "D-inline-fixed-one-only", &d)?;
|
||||
let b = fixture('B', false);
|
||||
let baseline_case = Case {
|
||||
name: "wrong_baseline_context".into(),
|
||||
base: None,
|
||||
bindings: b.baseline.as_ref().unwrap().bindings.clone(),
|
||||
};
|
||||
assert_eq!(
|
||||
evaluate(&b, &baseline_case, "total")?.value,
|
||||
Value::Int(21750)
|
||||
);
|
||||
assert_total(&b, 19, 23175);
|
||||
checks += 2;
|
||||
let mut explicit = fixture('B', false);
|
||||
explicit
|
||||
.baseline
|
||||
.as_mut()
|
||||
.unwrap()
|
||||
.bindings
|
||||
.insert("varying01".into(), Expr::Missing);
|
||||
explicit.cases[19].bindings.remove("varying01");
|
||||
validate(&explicit)?;
|
||||
assert!(matches!(
|
||||
evaluate(&explicit, &explicit.cases[19], "total")?.value,
|
||||
Value::Missing(_)
|
||||
));
|
||||
checks += 1;
|
||||
let mut chained = fixture('B', false);
|
||||
chained.cases[1].base = Some("case01".into());
|
||||
assert!(validate(&chained).unwrap_err().contains("case-to-case"));
|
||||
checks += 1;
|
||||
let mut capture = fixture('D', true);
|
||||
capture.functions.get_mut("budget_formula").unwrap().body = Expr::Ref("fixed01".into());
|
||||
assert!(validate(&capture).unwrap_err().contains("captures"));
|
||||
checks += 1;
|
||||
let mut recursive = fixture('D', true);
|
||||
recursive.functions.get_mut("budget_formula").unwrap().body =
|
||||
Expr::Call("budget_formula".into(), vec![Expr::Ref("result".into())]);
|
||||
assert!(validate(&recursive).unwrap_err().contains("cycle"));
|
||||
checks += 1;
|
||||
writeln!(report,"\nExecuted assertions: {checks}. All passed. Every accepted fixture was parsed, validated, rendered and parsed back with exact experiment AST equality. Rejected cases were checked separately.\n").unwrap();
|
||||
report.push_str("Negative controls: D changing one repeated fixed input changes only that case; B evaluating inherited formulas against baseline inputs instead of effective case inputs gives 21,750 instead of case20's 23,175. A shallow B case copy is not frozen; factored D also needs its definition environment snapshotted. Clearing a B override restores its named baseline value, including an explicitly missing baseline. A deleted D binding row rejects. Baseline chains, recursive definitions and project captures inside pure functions reject.\n");
|
||||
std::fs::write(dir.join("RESULTS.md"), &report).map_err(|e| e.to_string())?;
|
||||
println!("{report}");
|
||||
Ok(())
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
# Current-source7 authoring probe
|
||||
|
||||
Isolated experiment owned by Codex-956atf `/root/requirements_delta`. The complete initial example is `alarm-response.arcadia`; `probe.rs` calls the existing public core. No proposed new syntax is implemented here.
|
||||
|
||||
The final run passed with no model warnings on 2026-09-11. See `probe-output.txt` and the parent design report. Generated source alternatives live in `observed/`: open `stabilized.arcadia`, `canonical.arcadia`, `renamed.arcadia` or `reparented.arcadia` individually. The split example consists of `split-entry.arcadia` plus `participants.arcadia`. The six alternatives are not one SourceBundle.
|
||||
|
||||
The split-entry snapshot retains the indentation on the blank line left by moving its participant declaration. That trailing whitespace is intentional observed source, not a hand-authored formatting requirement; preserve the snapshot's bytes when using it as evidence.
|
||||
|
||||
The reader lease used Rust 1.98.1 gnullvm and core artifact `liboa_core-6c8da57367eec642.rlib`, SHA-256 `D7EFB5F3C423FF8AF13637F53CC481502C7F317BF01E9D072F9EFD64CD954C13`. Root retains Cargo/build ownership. The temporary probe executable was removed; no target artifact was changed.
|
||||
|
||||
From the repository root, after the build owner identifies the matching artifact and grants a reader lease:
|
||||
|
||||
```powershell
|
||||
. .local\toolchain\env.ps1
|
||||
$authoringCore = (Get-Item -LiteralPath 'target\debug\deps\liboa_core-6c8da57367eec642.rlib').FullName
|
||||
$authoringDeps = Join-Path (Get-Location) 'target\debug\deps'
|
||||
$authoringProbe = Join-Path (Get-Location) 'harness\experiments\textual-authoring-20260911\probe.exe'
|
||||
rustc --edition=2024 'harness\experiments\textual-authoring-20260911\probe.rs' --extern "oa_core=$authoringCore" -L "dependency=$authoringDeps" -C linker=clang.exe -o $authoringProbe
|
||||
if ($LASTEXITCODE -ne 0) { throw 'Probe compilation failed' }
|
||||
& $authoringProbe 'harness\experiments\textual-authoring-20260911\alarm-response.arcadia' 'harness\experiments\textual-authoring-20260911\observed-rerun'
|
||||
if ($LASTEXITCODE -ne 0) { throw 'Probe assertions failed' }
|
||||
```
|
||||
|
||||
Each run intentionally authors a new model from omitted IDs, so regenerated UUID bytes differ across runs. Assertions test stable identity only after adopting that run's accepted bundle. The retained `observed/` snapshots are the exact final run, not deterministic UUID fixtures. The probe does not test HTTP/native UI, save recovery, performance or a new grammar.
|
||||
@@ -0,0 +1,110 @@
|
||||
arcadia 7;
|
||||
project alarm_response "Alarm response" {
|
||||
description "A complete small OA/SA source-authoring example. Numerical annotations are descriptive.";
|
||||
|
||||
oa_actor plant_operator "Plant operator" {}
|
||||
oa_entity maintenance "Maintenance team" {}
|
||||
oa_activity manage_alarm "Manage a pressure alarm" {
|
||||
oa_activity detect_alarm "Detect alarm" {}
|
||||
// Assessing the alarm is work decomposition, independently allocated below.
|
||||
oa_activity assess_alarm "Assess alarm" {}
|
||||
}
|
||||
oa_capability safe_response "Respond safely" {}
|
||||
oa_exchange_item alarm_report "Alarm report" {
|
||||
mechanism Flow;
|
||||
oa_data_field reported_pressure "Reported pressure" {
|
||||
type_ref Real;
|
||||
unit "kPa";
|
||||
}
|
||||
}
|
||||
allocation operator_detects "Operator detects" {
|
||||
source @plant_operator; target @detect_alarm;
|
||||
}
|
||||
allocation team_assesses "Team assesses" {
|
||||
source @maintenance; target @assess_alarm;
|
||||
}
|
||||
interaction alarm_message "Pressure alarm report" {
|
||||
source @detect_alarm; target @assess_alarm; items [@alarm_report];
|
||||
}
|
||||
capability_involvement assessment_supports_response "Assessment supports safe response" {
|
||||
source @assess_alarm; target @safe_response;
|
||||
}
|
||||
|
||||
oa_process triage "Alarm triage" {
|
||||
steps [@detect_once, @assess_once];
|
||||
oa_occurrence detect_once "Detect this alarm" {
|
||||
body { Action { action @detect_alarm; lifeline none; }; };
|
||||
}
|
||||
oa_occurrence assess_once "Assess this alarm" {
|
||||
body { Action { action @assess_alarm; lifeline none; }; };
|
||||
}
|
||||
}
|
||||
sequence_link assessment_after_detection "Assess after detecting" {
|
||||
source @detect_once; target @assess_once;
|
||||
}
|
||||
chain_involvement triage_supports_response "Triage supports safe response" {
|
||||
source @triage; target @safe_response;
|
||||
}
|
||||
|
||||
oa_scenario notification "Alarm notification" {
|
||||
viewpoint OperationalActivity;
|
||||
context @safe_response;
|
||||
steps [@notify_once];
|
||||
oa_lifeline detector_line "Detector" { represented @detect_alarm; }
|
||||
oa_lifeline assessor_line "Assessor" { represented @assess_alarm; }
|
||||
oa_occurrence notify_once "Report this pressure" {
|
||||
body { Exchange {
|
||||
exchange @alarm_message; sender @detector_line; receiver @assessor_line;
|
||||
message_kind Asynchronous; reply_to none;
|
||||
values [{ field @reported_pressure; path []; expression "420"; }];
|
||||
}; };
|
||||
}
|
||||
}
|
||||
|
||||
sa_system alarm_console "Alarm console" {
|
||||
sa_state_machine console_status "Console status" {
|
||||
sa_region console_region "Main region" {
|
||||
sa_initial console_start "Start" {}
|
||||
sa_state console_ready "Ready" {}
|
||||
sa_state console_alerting "Alerting" {}
|
||||
}
|
||||
}
|
||||
}
|
||||
sa_function classify_alarm "Classify alarm" {}
|
||||
sa_functional_chain classification_flow "Alarm classification" {
|
||||
steps [@classify_once];
|
||||
sa_occurrence classify_once "Classify this alarm" {
|
||||
body { Action { action @classify_alarm; lifeline none; }; };
|
||||
}
|
||||
}
|
||||
allocation console_classifies "Console classifies" {
|
||||
source @alarm_console; target @classify_alarm;
|
||||
}
|
||||
sa_event alarm_received "Alarm received" {}
|
||||
state_transition initialize_console "Initialize" {
|
||||
source @console_start; target @console_ready;
|
||||
}
|
||||
state_transition display_alarm "Display alarm" {
|
||||
source @console_ready; target @console_alerting; triggers [@alarm_received];
|
||||
}
|
||||
trace assessment_refinement "Alarm classification refines assessment" {
|
||||
oa @assess_alarm; sa @classify_alarm;
|
||||
baseline {
|
||||
oa { name "Assess alarm"; description ""; };
|
||||
sa { name "Classify alarm"; description ""; };
|
||||
};
|
||||
}
|
||||
artifact response_procedure "Response procedure" {
|
||||
owner @assess_alarm; uri "procedures/alarm-response.md"; revision "review-1";
|
||||
}
|
||||
|
||||
diagram response_view "Operational work" { projection FunctionalDataflow; }
|
||||
node detector_card {
|
||||
diagram @response_view; element @detect_alarm;
|
||||
position { x 40; y 40; };
|
||||
}
|
||||
node assessor_card {
|
||||
diagram @response_view; element @assess_alarm;
|
||||
position { x 400; y 40; };
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,344 @@
|
||||
arcadia 7;
|
||||
project alarm_response "Alarm response" id "a0f5c4c2-f39c-4095-9816-71f1862e24d8" {
|
||||
description "A complete small OA/SA source-authoring example. Numerical annotations are descriptive.";
|
||||
|
||||
oa_exchange_item alarm_report "Alarm report" id "0a48a460-964a-4578-97c4-428707e8b201" {
|
||||
description "";
|
||||
kind Information;
|
||||
mechanism Flow;
|
||||
parent none;
|
||||
supertype none;
|
||||
}
|
||||
|
||||
oa_data_field reported_pressure "Reported pressure" id "0bf7f442-cc8d-4782-ba65-f357e91fd477" {
|
||||
default none;
|
||||
description "";
|
||||
direction Unspecified;
|
||||
maximum 1;
|
||||
minimum 1;
|
||||
parent @alarm_report;
|
||||
storage Value;
|
||||
type_ref Real;
|
||||
unit "kPa";
|
||||
}
|
||||
|
||||
oa_lifeline assessor_line "Assessor" id "1b421446-9d17-4c8b-90f1-6fbe8b513a04" {
|
||||
description "";
|
||||
parent @notification;
|
||||
represented @assess_alarm;
|
||||
}
|
||||
|
||||
oa_activity manage_alarm "Manage a pressure alarm" id "4154bf39-9fd5-490e-aebf-fba3d67b697c" {
|
||||
description "";
|
||||
parent none;
|
||||
}
|
||||
|
||||
sa_state console_alerting "Alerting" id "4d167878-2bbe-4acd-abd6-ee7dcd42ec50" {
|
||||
description "";
|
||||
do_activity "";
|
||||
entry "";
|
||||
exit "";
|
||||
kind State;
|
||||
parent @console_region;
|
||||
}
|
||||
|
||||
oa_occurrence assess_once "Assess this alarm" id "528d1c78-62d9-4e45-bb4a-cf529d8ed4a9" {
|
||||
body {
|
||||
Action {
|
||||
action @assess_alarm;
|
||||
lifeline none;
|
||||
};
|
||||
};
|
||||
description "";
|
||||
parent @triage;
|
||||
postcondition "";
|
||||
precondition "";
|
||||
}
|
||||
|
||||
sa_functional_chain classification_flow "Alarm classification" id "578dbcd5-3c28-43d8-913e-af27bc51ebde" {
|
||||
description "";
|
||||
parent none;
|
||||
steps [@classify_once];
|
||||
}
|
||||
|
||||
oa_lifeline detector_line "Detector" id "57c62024-6d19-4818-ac8c-66fb4a9b3da7" {
|
||||
description "";
|
||||
parent @notification;
|
||||
represented @detect_alarm;
|
||||
}
|
||||
|
||||
sa_initial console_start "Start" id "5a92c3a8-6af5-452a-849e-c2a17dc33260" {
|
||||
description "";
|
||||
do_activity "";
|
||||
entry "";
|
||||
exit "";
|
||||
kind Initial;
|
||||
parent @console_region;
|
||||
}
|
||||
|
||||
oa_actor plant_operator "Plant operator" id "60539571-2921-4e7d-ab83-bae670d0cb15" {
|
||||
description "";
|
||||
parent none;
|
||||
}
|
||||
|
||||
oa_scenario notification "Alarm notification" id "69e23f04-7bb3-4db1-a2a3-d8e65101c546" {
|
||||
context @safe_response;
|
||||
description "";
|
||||
parent none;
|
||||
postcondition "";
|
||||
precondition "";
|
||||
steps [@notify_once];
|
||||
viewpoint OperationalActivity;
|
||||
}
|
||||
|
||||
oa_entity maintenance "Maintenance team" id "6af96577-1b04-4ba1-b91b-6cef61adc6d6" {
|
||||
description "";
|
||||
parent none;
|
||||
}
|
||||
|
||||
oa_occurrence detect_once "Detect this alarm" id "6ca87cbe-9579-49b3-884e-e6ee63ba8c5b" {
|
||||
body {
|
||||
Action {
|
||||
action @detect_alarm;
|
||||
lifeline none;
|
||||
};
|
||||
};
|
||||
description "";
|
||||
parent @triage;
|
||||
postcondition "";
|
||||
precondition "";
|
||||
}
|
||||
|
||||
sa_event alarm_received "Alarm received" id "7fba860a-721f-4da2-8315-010de2e9c69e" {
|
||||
body {
|
||||
Signal {
|
||||
items [];
|
||||
};
|
||||
};
|
||||
description "";
|
||||
parent none;
|
||||
}
|
||||
|
||||
oa_activity assess_alarm "Assess alarm" id "8cbd5a4f-1c31-49c9-8a01-987144ce962e" {
|
||||
description "";
|
||||
parent @manage_alarm;
|
||||
}
|
||||
|
||||
sa_state console_ready "Ready" id "9064a197-96ea-4bdf-9dd6-2e9ef66856d8" {
|
||||
description "";
|
||||
do_activity "";
|
||||
entry "";
|
||||
exit "";
|
||||
kind State;
|
||||
parent @console_region;
|
||||
}
|
||||
|
||||
oa_process triage "Alarm triage" id "9888d781-09f3-4861-b9dc-7a97080d24d6" {
|
||||
description "";
|
||||
parent none;
|
||||
steps [@detect_once, @assess_once];
|
||||
}
|
||||
|
||||
sa_system alarm_console "Alarm console" id "9ea585b5-be12-4204-8909-02ea9bed49f0" {
|
||||
description "";
|
||||
parent none;
|
||||
}
|
||||
|
||||
oa_occurrence notify_once "Report this pressure" id "a1c37b31-41ed-4e16-a243-a50702ff1bc1" {
|
||||
body {
|
||||
Exchange {
|
||||
exchange @alarm_message;
|
||||
message_kind Asynchronous;
|
||||
receiver @assessor_line;
|
||||
reply_to none;
|
||||
sender @detector_line;
|
||||
values [{
|
||||
expression "420";
|
||||
field @reported_pressure;
|
||||
path [];
|
||||
}];
|
||||
};
|
||||
};
|
||||
description "";
|
||||
parent @notification;
|
||||
postcondition "";
|
||||
precondition "";
|
||||
}
|
||||
|
||||
sa_occurrence classify_once "Classify this alarm" id "a6c37863-8e72-44f9-a8a3-fea06341c714" {
|
||||
body {
|
||||
Action {
|
||||
action @classify_alarm;
|
||||
lifeline none;
|
||||
};
|
||||
};
|
||||
description "";
|
||||
parent @classification_flow;
|
||||
postcondition "";
|
||||
precondition "";
|
||||
}
|
||||
|
||||
sa_state_machine console_status "Console status" id "a6c6f463-5c80-4b02-a2e6-67cd0088b2f2" {
|
||||
description "";
|
||||
parent @alarm_console;
|
||||
}
|
||||
|
||||
sa_function classify_alarm "Classify alarm" id "ad6941ee-f900-4a2b-a368-d8879f1ffece" {
|
||||
description "";
|
||||
parent none;
|
||||
}
|
||||
|
||||
oa_activity detect_alarm "Detect alarm" id "bf9e9d8a-edb2-47f4-93f9-7ae373c42160" {
|
||||
description "";
|
||||
parent @manage_alarm;
|
||||
}
|
||||
|
||||
oa_capability safe_response "Respond safely" id "c097b1b5-45dc-49de-bcf6-89b5ccb752d1" {
|
||||
description "";
|
||||
parent none;
|
||||
}
|
||||
|
||||
sa_region console_region "Main region" id "e8b62edc-2233-4ec4-a811-2e8baf81a6e9" {
|
||||
description "";
|
||||
parent @console_status;
|
||||
}
|
||||
|
||||
interaction alarm_message "Pressure alarm report" id "269e5bdd-2478-4a43-9c77-84d99ac4e8a6" {
|
||||
description "";
|
||||
items [@alarm_report];
|
||||
source @detect_alarm;
|
||||
target @assess_alarm;
|
||||
}
|
||||
|
||||
capability_involvement assessment_supports_response "Assessment supports safe response" id "27633a6d-d962-4d19-9367-9ca3f00de0b0" {
|
||||
description "";
|
||||
source @assess_alarm;
|
||||
target @safe_response;
|
||||
}
|
||||
|
||||
allocation console_classifies "Console classifies" id "294d4262-303f-41db-b01e-fe47c1647693" {
|
||||
description "";
|
||||
source @alarm_console;
|
||||
target @classify_alarm;
|
||||
}
|
||||
|
||||
chain_involvement triage_supports_response "Triage supports safe response" id "2aeba184-bf69-49c7-87ff-cc2da82b006c" {
|
||||
description "";
|
||||
source @triage;
|
||||
target @safe_response;
|
||||
}
|
||||
|
||||
state_transition initialize_console "Initialize" id "839d4359-c78f-414b-867e-5b40b1f145cc" {
|
||||
description "";
|
||||
effect "";
|
||||
effects [];
|
||||
guard "";
|
||||
source @console_start;
|
||||
target @console_ready;
|
||||
transition_kind External;
|
||||
trigger "";
|
||||
triggers [];
|
||||
}
|
||||
|
||||
allocation operator_detects "Operator detects" id "8653fb7d-529d-495d-abde-897dee36b4bb" {
|
||||
description "";
|
||||
source @plant_operator;
|
||||
target @detect_alarm;
|
||||
}
|
||||
|
||||
allocation team_assesses "Team assesses" id "bb36afbf-9878-401b-b172-d04b08ecf603" {
|
||||
description "";
|
||||
source @maintenance;
|
||||
target @assess_alarm;
|
||||
}
|
||||
|
||||
sequence_link assessment_after_detection "Assess after detecting" id "bfd9c0e7-832b-4983-90aa-fc37d23193e2" {
|
||||
description "";
|
||||
guard "";
|
||||
source @detect_once;
|
||||
target @assess_once;
|
||||
}
|
||||
|
||||
state_transition display_alarm "Display alarm" id "dd383165-1b89-46b9-8ae3-80a6b6406a4e" {
|
||||
description "";
|
||||
effect "";
|
||||
effects [];
|
||||
guard "";
|
||||
source @console_ready;
|
||||
target @console_alerting;
|
||||
transition_kind External;
|
||||
trigger "";
|
||||
triggers [@alarm_received];
|
||||
}
|
||||
|
||||
diagram response_view "Operational work" id "a44d9d69-78a0-49de-8eb8-3757aa6c0919" {
|
||||
description "";
|
||||
layer Oa;
|
||||
projection FunctionalDataflow;
|
||||
routes [];
|
||||
view_options {
|
||||
coverage "All";
|
||||
exchange_labels "Name";
|
||||
hidden_edges [];
|
||||
participant_categories "All";
|
||||
relation_kinds "All";
|
||||
work_categories "All";
|
||||
work_contexts "All";
|
||||
};
|
||||
}
|
||||
|
||||
node detector_card id "45f016f4-3558-45b9-9559-da8ef9d5dcad" {
|
||||
collapsed false;
|
||||
diagram @response_view;
|
||||
element @detect_alarm;
|
||||
position {
|
||||
x 40.0;
|
||||
y 40.0;
|
||||
};
|
||||
size {
|
||||
height 94.0;
|
||||
width 224.0;
|
||||
};
|
||||
}
|
||||
|
||||
node assessor_card id "6ee7a0cc-013b-4a0f-8cff-513872e028b7" {
|
||||
collapsed false;
|
||||
diagram @response_view;
|
||||
element @assess_alarm;
|
||||
position {
|
||||
x 400.0;
|
||||
y 40.0;
|
||||
};
|
||||
size {
|
||||
height 94.0;
|
||||
width 224.0;
|
||||
};
|
||||
}
|
||||
|
||||
artifact response_procedure "Response procedure" id "6ba54037-c6f1-495b-ba96-6f2e910a218c" {
|
||||
description "";
|
||||
fragment none;
|
||||
owner @assess_alarm;
|
||||
relation References;
|
||||
revision "review-1";
|
||||
uri "procedures/alarm-response.md";
|
||||
}
|
||||
|
||||
trace assessment_refinement "Alarm classification refines assessment" id "34142333-67c2-4972-a64f-47e140ed93ca" {
|
||||
baseline {
|
||||
oa {
|
||||
description "";
|
||||
name "Assess alarm";
|
||||
};
|
||||
sa {
|
||||
description "";
|
||||
name "Classify alarm";
|
||||
};
|
||||
};
|
||||
description "";
|
||||
kind Refinement;
|
||||
oa @assess_alarm;
|
||||
sa @classify_alarm;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
oa_actor plant_operator "Plant operator" id "60539571-2921-4e7d-ab83-bae670d0cb15" {}
|
||||
@@ -0,0 +1,110 @@
|
||||
arcadia 7;
|
||||
project alarm_response "Alarm response" id "a0f5c4c2-f39c-4095-9816-71f1862e24d8" {
|
||||
description "A complete small OA/SA source-authoring example. Numerical annotations are descriptive.";
|
||||
|
||||
oa_actor plant_operator "Plant operator" id "60539571-2921-4e7d-ab83-bae670d0cb15" {}
|
||||
oa_entity maintenance "Maintenance team" id "6af96577-1b04-4ba1-b91b-6cef61adc6d6" {}
|
||||
oa_activity manage_alarm "Manage a pressure alarm" id "4154bf39-9fd5-490e-aebf-fba3d67b697c" {
|
||||
oa_activity detect_alarm "Detect alarm" id "bf9e9d8a-edb2-47f4-93f9-7ae373c42160" {}
|
||||
// Assessing the alarm is work decomposition, independently allocated below.
|
||||
oa_activity review_alarm "Assess alarm" id "8cbd5a4f-1c31-49c9-8a01-987144ce962e" {}
|
||||
}
|
||||
oa_capability safe_response "Respond safely" id "c097b1b5-45dc-49de-bcf6-89b5ccb752d1" {}
|
||||
oa_exchange_item alarm_report "Alarm report" id "0a48a460-964a-4578-97c4-428707e8b201" {
|
||||
mechanism Flow;
|
||||
oa_data_field reported_pressure "Reported pressure" id "0bf7f442-cc8d-4782-ba65-f357e91fd477" {
|
||||
type_ref Real;
|
||||
unit "kPa";
|
||||
}
|
||||
}
|
||||
allocation operator_detects "Operator detects" id "8653fb7d-529d-495d-abde-897dee36b4bb" {
|
||||
source @plant_operator; target @detect_alarm;
|
||||
}
|
||||
allocation team_assesses "Team assesses" id "bb36afbf-9878-401b-b172-d04b08ecf603" {
|
||||
source @maintenance; target @review_alarm;
|
||||
}
|
||||
interaction alarm_message "Pressure alarm report" id "269e5bdd-2478-4a43-9c77-84d99ac4e8a6" {
|
||||
source @detect_alarm; target @review_alarm; items [@alarm_report];
|
||||
}
|
||||
capability_involvement assessment_supports_response "Assessment supports safe response" id "27633a6d-d962-4d19-9367-9ca3f00de0b0" {
|
||||
source @review_alarm; target @safe_response;
|
||||
}
|
||||
|
||||
oa_process triage "Alarm triage" id "9888d781-09f3-4861-b9dc-7a97080d24d6" {
|
||||
steps [@detect_once, @assess_once];
|
||||
oa_occurrence detect_once "Detect this alarm" id "6ca87cbe-9579-49b3-884e-e6ee63ba8c5b" {
|
||||
body { Action { action @detect_alarm; lifeline none; }; };
|
||||
}
|
||||
oa_occurrence assess_once "Assess this alarm" id "528d1c78-62d9-4e45-bb4a-cf529d8ed4a9" {
|
||||
body { Action { action @review_alarm; lifeline none; }; };
|
||||
}
|
||||
}
|
||||
sequence_link assessment_after_detection "Assess after detecting" id "bfd9c0e7-832b-4983-90aa-fc37d23193e2" {
|
||||
source @detect_once; target @assess_once;
|
||||
}
|
||||
chain_involvement triage_supports_response "Triage supports safe response" id "2aeba184-bf69-49c7-87ff-cc2da82b006c" {
|
||||
source @triage; target @safe_response;
|
||||
}
|
||||
|
||||
oa_scenario notification "Alarm notification" id "69e23f04-7bb3-4db1-a2a3-d8e65101c546" {
|
||||
viewpoint OperationalActivity;
|
||||
context @safe_response;
|
||||
steps [@notify_once];
|
||||
oa_lifeline detector_line "Detector" id "57c62024-6d19-4818-ac8c-66fb4a9b3da7" { represented @detect_alarm; }
|
||||
oa_lifeline assessor_line "Assessor" id "1b421446-9d17-4c8b-90f1-6fbe8b513a04" { represented @review_alarm; }
|
||||
oa_occurrence notify_once "Report this pressure" id "a1c37b31-41ed-4e16-a243-a50702ff1bc1" {
|
||||
body { Exchange {
|
||||
exchange @alarm_message; sender @detector_line; receiver @assessor_line;
|
||||
message_kind Asynchronous; reply_to none;
|
||||
values [{ field @reported_pressure; path []; expression "420"; }];
|
||||
}; };
|
||||
}
|
||||
}
|
||||
|
||||
sa_system alarm_console "Alarm console" id "9ea585b5-be12-4204-8909-02ea9bed49f0" {
|
||||
sa_state_machine console_status "Console status" id "a6c6f463-5c80-4b02-a2e6-67cd0088b2f2" {
|
||||
sa_region console_region "Main region" id "e8b62edc-2233-4ec4-a811-2e8baf81a6e9" {
|
||||
sa_initial console_start "Start" id "5a92c3a8-6af5-452a-849e-c2a17dc33260" {}
|
||||
sa_state console_ready "Ready" id "9064a197-96ea-4bdf-9dd6-2e9ef66856d8" {}
|
||||
sa_state console_alerting "Alerting" id "4d167878-2bbe-4acd-abd6-ee7dcd42ec50" {}
|
||||
}
|
||||
}
|
||||
}
|
||||
sa_function classify_alarm "Classify alarm" id "ad6941ee-f900-4a2b-a368-d8879f1ffece" {}
|
||||
sa_functional_chain classification_flow "Alarm classification" id "578dbcd5-3c28-43d8-913e-af27bc51ebde" {
|
||||
steps [@classify_once];
|
||||
sa_occurrence classify_once "Classify this alarm" id "a6c37863-8e72-44f9-a8a3-fea06341c714" {
|
||||
body { Action { action @classify_alarm; lifeline none; }; };
|
||||
}
|
||||
}
|
||||
allocation console_classifies "Console classifies" id "294d4262-303f-41db-b01e-fe47c1647693" {
|
||||
source @alarm_console; target @classify_alarm;
|
||||
}
|
||||
sa_event alarm_received "Alarm received" id "7fba860a-721f-4da2-8315-010de2e9c69e" {}
|
||||
state_transition initialize_console "Initialize" id "839d4359-c78f-414b-867e-5b40b1f145cc" {
|
||||
source @console_start; target @console_ready;
|
||||
}
|
||||
state_transition display_alarm "Display alarm" id "dd383165-1b89-46b9-8ae3-80a6b6406a4e" {
|
||||
source @console_ready; target @console_alerting; triggers [@alarm_received];
|
||||
}
|
||||
trace assessment_refinement "Alarm classification refines assessment" id "34142333-67c2-4972-a64f-47e140ed93ca" {
|
||||
oa @review_alarm; sa @classify_alarm;
|
||||
baseline {
|
||||
oa { name "Assess alarm"; description ""; };
|
||||
sa { name "Classify alarm"; description ""; };
|
||||
};
|
||||
}
|
||||
artifact response_procedure "Response procedure" id "6ba54037-c6f1-495b-ba96-6f2e910a218c" {
|
||||
owner @review_alarm; uri "procedures/alarm-response.md"; revision "review-1";
|
||||
}
|
||||
|
||||
diagram response_view "Operational work" id "a44d9d69-78a0-49de-8eb8-3757aa6c0919" { projection FunctionalDataflow; }
|
||||
node detector_card id "45f016f4-3558-45b9-9559-da8ef9d5dcad" {
|
||||
diagram @response_view; element @detect_alarm;
|
||||
position { x 40; y 40; };
|
||||
}
|
||||
node assessor_card id "6ee7a0cc-013b-4a0f-8cff-513872e028b7" {
|
||||
diagram @response_view; element @review_alarm;
|
||||
position { x 400; y 40; };
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,114 @@
|
||||
arcadia 7;
|
||||
project alarm_response "Alarm response" id "a0f5c4c2-f39c-4095-9816-71f1862e24d8" {
|
||||
description "A complete small OA/SA source-authoring example. Numerical annotations are descriptive.";
|
||||
|
||||
oa_actor plant_operator "Plant operator" id "60539571-2921-4e7d-ab83-bae670d0cb15" {}
|
||||
oa_entity maintenance "Maintenance team" id "6af96577-1b04-4ba1-b91b-6cef61adc6d6" {}
|
||||
oa_activity manage_alarm "Manage a pressure alarm" id "4154bf39-9fd5-490e-aebf-fba3d67b697c" {
|
||||
oa_activity detect_alarm "Detect alarm" id "bf9e9d8a-edb2-47f4-93f9-7ae373c42160" {}
|
||||
|
||||
|
||||
|
||||
}
|
||||
oa_capability safe_response "Respond safely" id "c097b1b5-45dc-49de-bcf6-89b5ccb752d1" {}
|
||||
oa_exchange_item alarm_report "Alarm report" id "0a48a460-964a-4578-97c4-428707e8b201" {
|
||||
mechanism Flow;
|
||||
oa_data_field reported_pressure "Reported pressure" id "0bf7f442-cc8d-4782-ba65-f357e91fd477" {
|
||||
type_ref Real;
|
||||
unit "kPa";
|
||||
}
|
||||
}
|
||||
allocation operator_detects "Operator detects" id "8653fb7d-529d-495d-abde-897dee36b4bb" {
|
||||
source @plant_operator; target @detect_alarm;
|
||||
}
|
||||
allocation team_assesses "Team assesses" id "bb36afbf-9878-401b-b172-d04b08ecf603" {
|
||||
source @maintenance; target @assess_alarm;
|
||||
}
|
||||
interaction alarm_message "Pressure alarm report" id "269e5bdd-2478-4a43-9c77-84d99ac4e8a6" {
|
||||
source @detect_alarm; target @assess_alarm; items [@alarm_report];
|
||||
}
|
||||
capability_involvement assessment_supports_response "Assessment supports safe response" id "27633a6d-d962-4d19-9367-9ca3f00de0b0" {
|
||||
source @assess_alarm; target @safe_response;
|
||||
}
|
||||
|
||||
oa_process triage "Alarm triage" id "9888d781-09f3-4861-b9dc-7a97080d24d6" {
|
||||
steps [@detect_once, @assess_once];
|
||||
oa_occurrence detect_once "Detect this alarm" id "6ca87cbe-9579-49b3-884e-e6ee63ba8c5b" {
|
||||
body { Action { action @detect_alarm; lifeline none; }; };
|
||||
}
|
||||
oa_occurrence assess_once "Assess this alarm" id "528d1c78-62d9-4e45-bb4a-cf529d8ed4a9" {
|
||||
body { Action { action @assess_alarm; lifeline none; }; };
|
||||
}
|
||||
}
|
||||
sequence_link assessment_after_detection "Assess after detecting" id "bfd9c0e7-832b-4983-90aa-fc37d23193e2" {
|
||||
source @detect_once; target @assess_once;
|
||||
}
|
||||
chain_involvement triage_supports_response "Triage supports safe response" id "2aeba184-bf69-49c7-87ff-cc2da82b006c" {
|
||||
source @triage; target @safe_response;
|
||||
}
|
||||
|
||||
oa_scenario notification "Alarm notification" id "69e23f04-7bb3-4db1-a2a3-d8e65101c546" {
|
||||
viewpoint OperationalActivity;
|
||||
context @safe_response;
|
||||
steps [@notify_once];
|
||||
oa_lifeline detector_line "Detector" id "57c62024-6d19-4818-ac8c-66fb4a9b3da7" { represented @detect_alarm; }
|
||||
oa_lifeline assessor_line "Assessor" id "1b421446-9d17-4c8b-90f1-6fbe8b513a04" { represented @assess_alarm; }
|
||||
oa_occurrence notify_once "Report this pressure" id "a1c37b31-41ed-4e16-a243-a50702ff1bc1" {
|
||||
body { Exchange {
|
||||
exchange @alarm_message; sender @detector_line; receiver @assessor_line;
|
||||
message_kind Asynchronous; reply_to none;
|
||||
values [{ field @reported_pressure; path []; expression "420"; }];
|
||||
}; };
|
||||
}
|
||||
}
|
||||
|
||||
sa_system alarm_console "Alarm console" id "9ea585b5-be12-4204-8909-02ea9bed49f0" {
|
||||
sa_state_machine console_status "Console status" id "a6c6f463-5c80-4b02-a2e6-67cd0088b2f2" {
|
||||
sa_region console_region "Main region" id "e8b62edc-2233-4ec4-a811-2e8baf81a6e9" {
|
||||
sa_initial console_start "Start" id "5a92c3a8-6af5-452a-849e-c2a17dc33260" {}
|
||||
sa_state console_ready "Ready" id "9064a197-96ea-4bdf-9dd6-2e9ef66856d8" {}
|
||||
sa_state console_alerting "Alerting" id "4d167878-2bbe-4acd-abd6-ee7dcd42ec50" {}
|
||||
}
|
||||
}
|
||||
}
|
||||
sa_function classify_alarm "Classify alarm" id "ad6941ee-f900-4a2b-a368-d8879f1ffece" {}
|
||||
sa_functional_chain classification_flow "Alarm classification" id "578dbcd5-3c28-43d8-913e-af27bc51ebde" {
|
||||
steps [@classify_once];
|
||||
sa_occurrence classify_once "Classify this alarm" id "a6c37863-8e72-44f9-a8a3-fea06341c714" {
|
||||
body { Action { action @classify_alarm; lifeline none; }; };
|
||||
}
|
||||
}
|
||||
allocation console_classifies "Console classifies" id "294d4262-303f-41db-b01e-fe47c1647693" {
|
||||
source @alarm_console; target @classify_alarm;
|
||||
}
|
||||
sa_event alarm_received "Alarm received" id "7fba860a-721f-4da2-8315-010de2e9c69e" {}
|
||||
state_transition initialize_console "Initialize" id "839d4359-c78f-414b-867e-5b40b1f145cc" {
|
||||
source @console_start; target @console_ready;
|
||||
}
|
||||
state_transition display_alarm "Display alarm" id "dd383165-1b89-46b9-8ae3-80a6b6406a4e" {
|
||||
source @console_ready; target @console_alerting; triggers [@alarm_received];
|
||||
}
|
||||
trace assessment_refinement "Alarm classification refines assessment" id "34142333-67c2-4972-a64f-47e140ed93ca" {
|
||||
oa @assess_alarm; sa @classify_alarm;
|
||||
baseline {
|
||||
oa { name "Assess alarm"; description ""; };
|
||||
sa { name "Classify alarm"; description ""; };
|
||||
};
|
||||
}
|
||||
artifact response_procedure "Response procedure" id "6ba54037-c6f1-495b-ba96-6f2e910a218c" {
|
||||
owner @assess_alarm; uri "procedures/alarm-response.md"; revision "review-1";
|
||||
}
|
||||
|
||||
diagram response_view "Operational work" id "a44d9d69-78a0-49de-8eb8-3757aa6c0919" { projection FunctionalDataflow; }
|
||||
node detector_card id "45f016f4-3558-45b9-9559-da8ef9d5dcad" {
|
||||
diagram @response_view; element @detect_alarm;
|
||||
position { x 40; y 40; };
|
||||
}
|
||||
node assessor_card id "6ee7a0cc-013b-4a0f-8cff-513872e028b7" {
|
||||
diagram @response_view; element @assess_alarm;
|
||||
position { x 400; y 40; };
|
||||
}
|
||||
|
||||
// Assessing the alarm is work decomposition, independently allocated below.
|
||||
oa_activity assess_alarm "Assess alarm" id "8cbd5a4f-1c31-49c9-8a01-987144ce962e" {}
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
arcadia 7;
|
||||
project alarm_response "Alarm response" id "a0f5c4c2-f39c-4095-9816-71f1862e24d8" {
|
||||
description "A complete small OA/SA source-authoring example. Numerical annotations are descriptive.";
|
||||
|
||||
|
||||
oa_entity maintenance "Maintenance team" id "6af96577-1b04-4ba1-b91b-6cef61adc6d6" {}
|
||||
oa_activity manage_alarm "Manage a pressure alarm" id "4154bf39-9fd5-490e-aebf-fba3d67b697c" {
|
||||
oa_activity detect_alarm "Detect alarm" id "bf9e9d8a-edb2-47f4-93f9-7ae373c42160" {}
|
||||
// Assessing the alarm is work decomposition, independently allocated below.
|
||||
oa_activity assess_alarm "Assess alarm" id "8cbd5a4f-1c31-49c9-8a01-987144ce962e" {}
|
||||
}
|
||||
oa_capability safe_response "Respond safely" id "c097b1b5-45dc-49de-bcf6-89b5ccb752d1" {}
|
||||
oa_exchange_item alarm_report "Alarm report" id "0a48a460-964a-4578-97c4-428707e8b201" {
|
||||
mechanism Flow;
|
||||
oa_data_field reported_pressure "Reported pressure" id "0bf7f442-cc8d-4782-ba65-f357e91fd477" {
|
||||
type_ref Real;
|
||||
unit "kPa";
|
||||
}
|
||||
}
|
||||
allocation operator_detects "Operator detects" id "8653fb7d-529d-495d-abde-897dee36b4bb" {
|
||||
source @plant_operator; target @detect_alarm;
|
||||
}
|
||||
allocation team_assesses "Team assesses" id "bb36afbf-9878-401b-b172-d04b08ecf603" {
|
||||
source @maintenance; target @assess_alarm;
|
||||
}
|
||||
interaction alarm_message "Pressure alarm report" id "269e5bdd-2478-4a43-9c77-84d99ac4e8a6" {
|
||||
source @detect_alarm; target @assess_alarm; items [@alarm_report];
|
||||
}
|
||||
capability_involvement assessment_supports_response "Assessment supports safe response" id "27633a6d-d962-4d19-9367-9ca3f00de0b0" {
|
||||
source @assess_alarm; target @safe_response;
|
||||
}
|
||||
|
||||
oa_process triage "Alarm triage" id "9888d781-09f3-4861-b9dc-7a97080d24d6" {
|
||||
steps [@detect_once, @assess_once];
|
||||
oa_occurrence detect_once "Detect this alarm" id "6ca87cbe-9579-49b3-884e-e6ee63ba8c5b" {
|
||||
body { Action { action @detect_alarm; lifeline none; }; };
|
||||
}
|
||||
oa_occurrence assess_once "Assess this alarm" id "528d1c78-62d9-4e45-bb4a-cf529d8ed4a9" {
|
||||
body { Action { action @assess_alarm; lifeline none; }; };
|
||||
}
|
||||
}
|
||||
sequence_link assessment_after_detection "Assess after detecting" id "bfd9c0e7-832b-4983-90aa-fc37d23193e2" {
|
||||
source @detect_once; target @assess_once;
|
||||
}
|
||||
chain_involvement triage_supports_response "Triage supports safe response" id "2aeba184-bf69-49c7-87ff-cc2da82b006c" {
|
||||
source @triage; target @safe_response;
|
||||
}
|
||||
|
||||
oa_scenario notification "Alarm notification" id "69e23f04-7bb3-4db1-a2a3-d8e65101c546" {
|
||||
viewpoint OperationalActivity;
|
||||
context @safe_response;
|
||||
steps [@notify_once];
|
||||
oa_lifeline detector_line "Detector" id "57c62024-6d19-4818-ac8c-66fb4a9b3da7" { represented @detect_alarm; }
|
||||
oa_lifeline assessor_line "Assessor" id "1b421446-9d17-4c8b-90f1-6fbe8b513a04" { represented @assess_alarm; }
|
||||
oa_occurrence notify_once "Report this pressure" id "a1c37b31-41ed-4e16-a243-a50702ff1bc1" {
|
||||
body { Exchange {
|
||||
exchange @alarm_message; sender @detector_line; receiver @assessor_line;
|
||||
message_kind Asynchronous; reply_to none;
|
||||
values [{ field @reported_pressure; path []; expression "420"; }];
|
||||
}; };
|
||||
}
|
||||
}
|
||||
|
||||
sa_system alarm_console "Alarm console" id "9ea585b5-be12-4204-8909-02ea9bed49f0" {
|
||||
sa_state_machine console_status "Console status" id "a6c6f463-5c80-4b02-a2e6-67cd0088b2f2" {
|
||||
sa_region console_region "Main region" id "e8b62edc-2233-4ec4-a811-2e8baf81a6e9" {
|
||||
sa_initial console_start "Start" id "5a92c3a8-6af5-452a-849e-c2a17dc33260" {}
|
||||
sa_state console_ready "Ready" id "9064a197-96ea-4bdf-9dd6-2e9ef66856d8" {}
|
||||
sa_state console_alerting "Alerting" id "4d167878-2bbe-4acd-abd6-ee7dcd42ec50" {}
|
||||
}
|
||||
}
|
||||
}
|
||||
sa_function classify_alarm "Classify alarm" id "ad6941ee-f900-4a2b-a368-d8879f1ffece" {}
|
||||
sa_functional_chain classification_flow "Alarm classification" id "578dbcd5-3c28-43d8-913e-af27bc51ebde" {
|
||||
steps [@classify_once];
|
||||
sa_occurrence classify_once "Classify this alarm" id "a6c37863-8e72-44f9-a8a3-fea06341c714" {
|
||||
body { Action { action @classify_alarm; lifeline none; }; };
|
||||
}
|
||||
}
|
||||
allocation console_classifies "Console classifies" id "294d4262-303f-41db-b01e-fe47c1647693" {
|
||||
source @alarm_console; target @classify_alarm;
|
||||
}
|
||||
sa_event alarm_received "Alarm received" id "7fba860a-721f-4da2-8315-010de2e9c69e" {}
|
||||
state_transition initialize_console "Initialize" id "839d4359-c78f-414b-867e-5b40b1f145cc" {
|
||||
source @console_start; target @console_ready;
|
||||
}
|
||||
state_transition display_alarm "Display alarm" id "dd383165-1b89-46b9-8ae3-80a6b6406a4e" {
|
||||
source @console_ready; target @console_alerting; triggers [@alarm_received];
|
||||
}
|
||||
trace assessment_refinement "Alarm classification refines assessment" id "34142333-67c2-4972-a64f-47e140ed93ca" {
|
||||
oa @assess_alarm; sa @classify_alarm;
|
||||
baseline {
|
||||
oa { name "Assess alarm"; description ""; };
|
||||
sa { name "Classify alarm"; description ""; };
|
||||
};
|
||||
}
|
||||
artifact response_procedure "Response procedure" id "6ba54037-c6f1-495b-ba96-6f2e910a218c" {
|
||||
owner @assess_alarm; uri "procedures/alarm-response.md"; revision "review-1";
|
||||
}
|
||||
|
||||
diagram response_view "Operational work" id "a44d9d69-78a0-49de-8eb8-3757aa6c0919" { projection FunctionalDataflow; }
|
||||
node detector_card id "45f016f4-3558-45b9-9559-da8ef9d5dcad" {
|
||||
diagram @response_view; element @detect_alarm;
|
||||
position { x 40; y 40; };
|
||||
}
|
||||
node assessor_card id "6ee7a0cc-013b-4a0f-8cff-513872e028b7" {
|
||||
diagram @response_view; element @assess_alarm;
|
||||
position { x 400; y 40; };
|
||||
}
|
||||
include "participants.arcadia";
|
||||
}
|
||||
@@ -0,0 +1,110 @@
|
||||
arcadia 7;
|
||||
project alarm_response "Alarm response" id "a0f5c4c2-f39c-4095-9816-71f1862e24d8" {
|
||||
description "A complete small OA/SA source-authoring example. Numerical annotations are descriptive.";
|
||||
|
||||
oa_actor plant_operator "Plant operator" id "60539571-2921-4e7d-ab83-bae670d0cb15" {}
|
||||
oa_entity maintenance "Maintenance team" id "6af96577-1b04-4ba1-b91b-6cef61adc6d6" {}
|
||||
oa_activity manage_alarm "Manage a pressure alarm" id "4154bf39-9fd5-490e-aebf-fba3d67b697c" {
|
||||
oa_activity detect_alarm "Detect alarm" id "bf9e9d8a-edb2-47f4-93f9-7ae373c42160" {}
|
||||
// Assessing the alarm is work decomposition, independently allocated below.
|
||||
oa_activity assess_alarm "Assess alarm" id "8cbd5a4f-1c31-49c9-8a01-987144ce962e" {}
|
||||
}
|
||||
oa_capability safe_response "Respond safely" id "c097b1b5-45dc-49de-bcf6-89b5ccb752d1" {}
|
||||
oa_exchange_item alarm_report "Alarm report" id "0a48a460-964a-4578-97c4-428707e8b201" {
|
||||
mechanism Flow;
|
||||
oa_data_field reported_pressure "Reported pressure" id "0bf7f442-cc8d-4782-ba65-f357e91fd477" {
|
||||
type_ref Real;
|
||||
unit "kPa";
|
||||
}
|
||||
}
|
||||
allocation operator_detects "Operator detects" id "8653fb7d-529d-495d-abde-897dee36b4bb" {
|
||||
source @plant_operator; target @detect_alarm;
|
||||
}
|
||||
allocation team_assesses "Team assesses" id "bb36afbf-9878-401b-b172-d04b08ecf603" {
|
||||
source @maintenance; target @assess_alarm;
|
||||
}
|
||||
interaction alarm_message "Pressure alarm report" id "269e5bdd-2478-4a43-9c77-84d99ac4e8a6" {
|
||||
source @detect_alarm; target @assess_alarm; items [@alarm_report];
|
||||
}
|
||||
capability_involvement assessment_supports_response "Assessment supports safe response" id "27633a6d-d962-4d19-9367-9ca3f00de0b0" {
|
||||
source @assess_alarm; target @safe_response;
|
||||
}
|
||||
|
||||
oa_process triage "Alarm triage" id "9888d781-09f3-4861-b9dc-7a97080d24d6" {
|
||||
steps [@detect_once, @assess_once];
|
||||
oa_occurrence detect_once "Detect this alarm" id "6ca87cbe-9579-49b3-884e-e6ee63ba8c5b" {
|
||||
body { Action { action @detect_alarm; lifeline none; }; };
|
||||
}
|
||||
oa_occurrence assess_once "Assess this alarm" id "528d1c78-62d9-4e45-bb4a-cf529d8ed4a9" {
|
||||
body { Action { action @assess_alarm; lifeline none; }; };
|
||||
}
|
||||
}
|
||||
sequence_link assessment_after_detection "Assess after detecting" id "bfd9c0e7-832b-4983-90aa-fc37d23193e2" {
|
||||
source @detect_once; target @assess_once;
|
||||
}
|
||||
chain_involvement triage_supports_response "Triage supports safe response" id "2aeba184-bf69-49c7-87ff-cc2da82b006c" {
|
||||
source @triage; target @safe_response;
|
||||
}
|
||||
|
||||
oa_scenario notification "Alarm notification" id "69e23f04-7bb3-4db1-a2a3-d8e65101c546" {
|
||||
viewpoint OperationalActivity;
|
||||
context @safe_response;
|
||||
steps [@notify_once];
|
||||
oa_lifeline detector_line "Detector" id "57c62024-6d19-4818-ac8c-66fb4a9b3da7" { represented @detect_alarm; }
|
||||
oa_lifeline assessor_line "Assessor" id "1b421446-9d17-4c8b-90f1-6fbe8b513a04" { represented @assess_alarm; }
|
||||
oa_occurrence notify_once "Report this pressure" id "a1c37b31-41ed-4e16-a243-a50702ff1bc1" {
|
||||
body { Exchange {
|
||||
exchange @alarm_message; sender @detector_line; receiver @assessor_line;
|
||||
message_kind Asynchronous; reply_to none;
|
||||
values [{ field @reported_pressure; path []; expression "420"; }];
|
||||
}; };
|
||||
}
|
||||
}
|
||||
|
||||
sa_system alarm_console "Alarm console" id "9ea585b5-be12-4204-8909-02ea9bed49f0" {
|
||||
sa_state_machine console_status "Console status" id "a6c6f463-5c80-4b02-a2e6-67cd0088b2f2" {
|
||||
sa_region console_region "Main region" id "e8b62edc-2233-4ec4-a811-2e8baf81a6e9" {
|
||||
sa_initial console_start "Start" id "5a92c3a8-6af5-452a-849e-c2a17dc33260" {}
|
||||
sa_state console_ready "Ready" id "9064a197-96ea-4bdf-9dd6-2e9ef66856d8" {}
|
||||
sa_state console_alerting "Alerting" id "4d167878-2bbe-4acd-abd6-ee7dcd42ec50" {}
|
||||
}
|
||||
}
|
||||
}
|
||||
sa_function classify_alarm "Classify alarm" id "ad6941ee-f900-4a2b-a368-d8879f1ffece" {}
|
||||
sa_functional_chain classification_flow "Alarm classification" id "578dbcd5-3c28-43d8-913e-af27bc51ebde" {
|
||||
steps [@classify_once];
|
||||
sa_occurrence classify_once "Classify this alarm" id "a6c37863-8e72-44f9-a8a3-fea06341c714" {
|
||||
body { Action { action @classify_alarm; lifeline none; }; };
|
||||
}
|
||||
}
|
||||
allocation console_classifies "Console classifies" id "294d4262-303f-41db-b01e-fe47c1647693" {
|
||||
source @alarm_console; target @classify_alarm;
|
||||
}
|
||||
sa_event alarm_received "Alarm received" id "7fba860a-721f-4da2-8315-010de2e9c69e" {}
|
||||
state_transition initialize_console "Initialize" id "839d4359-c78f-414b-867e-5b40b1f145cc" {
|
||||
source @console_start; target @console_ready;
|
||||
}
|
||||
state_transition display_alarm "Display alarm" id "dd383165-1b89-46b9-8ae3-80a6b6406a4e" {
|
||||
source @console_ready; target @console_alerting; triggers [@alarm_received];
|
||||
}
|
||||
trace assessment_refinement "Alarm classification refines assessment" id "34142333-67c2-4972-a64f-47e140ed93ca" {
|
||||
oa @assess_alarm; sa @classify_alarm;
|
||||
baseline {
|
||||
oa { name "Assess alarm"; description ""; };
|
||||
sa { name "Classify alarm"; description ""; };
|
||||
};
|
||||
}
|
||||
artifact response_procedure "Response procedure" id "6ba54037-c6f1-495b-ba96-6f2e910a218c" {
|
||||
owner @assess_alarm; uri "procedures/alarm-response.md"; revision "review-1";
|
||||
}
|
||||
|
||||
diagram response_view "Operational work" id "a44d9d69-78a0-49de-8eb8-3757aa6c0919" { projection FunctionalDataflow; }
|
||||
node detector_card id "45f016f4-3558-45b9-9559-da8ef9d5dcad" {
|
||||
diagram @response_view; element @detect_alarm;
|
||||
position { x 40; y 40; };
|
||||
}
|
||||
node assessor_card id "6ee7a0cc-013b-4a0f-8cff-513872e028b7" {
|
||||
diagram @response_view; element @assess_alarm;
|
||||
position { x 400; y 40; };
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
PASS: admission; stable and canonical round-trip; fresh/stable identity; raw alias rejection; command alias rewrite; nested reparent; cross-file move; source7 default probes
|
||||
objects=40 elements=25 relations=9 diagrams=1 artifacts=1 traces=1
|
||||
authored_bytes=4373 stable_bytes=6053 canonical_bytes=9710 authored_lines=110 stable_lines=110 canonical_lines=344
|
||||
warnings=[]
|
||||
@@ -0,0 +1,107 @@
|
||||
//! Isolated reader probe for root's build lease; no production dependencies added.
|
||||
//! Usage: probe.exe INPUT.arcadia OUTPUT_DIRECTORY
|
||||
use oa_core::{language, source_project::*, *};
|
||||
use std::{collections::BTreeMap, path::PathBuf};
|
||||
|
||||
fn compile(bundle: &SourceBundle) -> CompiledSourceProject {
|
||||
compile_bundle(bundle, ProjectLimits::default()).unwrap_or_else(|issues| {
|
||||
panic!("source admission failed: {issues:#?}")
|
||||
})
|
||||
}
|
||||
|
||||
fn identity(project: &Project, alias: &str) -> Id {
|
||||
project.identities().into_iter().find(|(_, name)| *name == alias).unwrap().0
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let arguments: Vec<_> = std::env::args_os().collect();
|
||||
assert_eq!(arguments.len(), 3, "expected input and isolated output directory");
|
||||
let input = std::fs::read_to_string(&arguments[1]).unwrap();
|
||||
let output = PathBuf::from(&arguments[2]);
|
||||
std::fs::create_dir_all(&output).unwrap();
|
||||
let bundle = SourceBundle {
|
||||
entry: "project.arcadia".into(),
|
||||
files: BTreeMap::from([("project.arcadia".into(), input.clone())]),
|
||||
};
|
||||
let compiled = compile(&bundle);
|
||||
let project = &compiled.decoded.project;
|
||||
assert_eq!(project.schema_version, 7);
|
||||
assert_eq!(project.identities().len(), 40);
|
||||
assert_eq!(compile(&compiled.bundle).decoded.project, *project);
|
||||
assert_eq!(compile(&compiled.bundle).bundle, compiled.bundle);
|
||||
assert_ne!(compile(&bundle).decoded.project.id, project.id);
|
||||
|
||||
let stable = &compiled.bundle.files["project.arcadia"];
|
||||
let canonical = language::format(project);
|
||||
assert_eq!(language::parse(&canonical).unwrap(), *project);
|
||||
assert_eq!(language::format(&language::parse(&canonical).unwrap()), canonical);
|
||||
assert_eq!(stable.matches(" id \"").count(), 40);
|
||||
assert!(stable.contains("// Assessing the alarm is work decomposition"));
|
||||
|
||||
let assess = identity(project, "assess_alarm");
|
||||
let mut header_only = compiled.bundle.clone();
|
||||
header_only.files.get_mut("project.arcadia").unwrap().replace_range(
|
||||
stable.find("oa_activity assess_alarm ").unwrap()
|
||||
..stable.find("oa_activity assess_alarm ").unwrap() + "oa_activity assess_alarm ".len(),
|
||||
"oa_activity review_alarm ",
|
||||
);
|
||||
assert!(compile_bundle(&header_only, ProjectLimits::default()).is_err());
|
||||
|
||||
let alias_plan = prepare_command(project, &Command::SetAlias(assess, "review_alarm".into())).unwrap();
|
||||
let aliased = update_bundle_with_identity_map(
|
||||
&compiled, &alias_plan.project, &alias_plan.identity_map, ProjectLimits::default(),
|
||||
).unwrap();
|
||||
assert_eq!(identity(&aliased.decoded.project, "review_alarm"), assess);
|
||||
assert!(!aliased.bundle.files["project.arcadia"].contains("@assess_alarm"));
|
||||
assert!(aliased.bundle.files["project.arcadia"].contains("// Assessing the alarm is work decomposition"));
|
||||
|
||||
let moved_plan = prepare_command(project, &Command::Reparent { element: assess, parent: None }).unwrap();
|
||||
let moved = update_bundle_with_identity_map(
|
||||
&compiled, &moved_plan.project, &moved_plan.identity_map, ProjectLimits::default(),
|
||||
).unwrap();
|
||||
assert_eq!(moved.decoded.project.elements[&assess].parent, None);
|
||||
assert!(moved.bundle.files["project.arcadia"].contains("// Assessing the alarm is work decomposition"));
|
||||
|
||||
let actor = identity(project, "plant_operator");
|
||||
let location = &compiled.index.declarations[&actor];
|
||||
let actor_text = &stable[location.span.start..location.span.end];
|
||||
let mut split_entry = stable.replacen(actor_text, "", 1);
|
||||
let closing = split_entry.rfind('}').unwrap();
|
||||
split_entry.insert_str(closing, " include \"participants.arcadia\";\n");
|
||||
let split = SourceBundle {
|
||||
entry: "project.arcadia".into(),
|
||||
files: BTreeMap::from([
|
||||
("project.arcadia".into(), split_entry),
|
||||
("participants.arcadia".into(), format!("{actor_text}\n")),
|
||||
]),
|
||||
};
|
||||
assert_eq!(compile(&split).decoded.project, *project);
|
||||
|
||||
let mut missing_viewpoint = compiled.bundle.clone();
|
||||
missing_viewpoint.files.insert("project.arcadia".into(), stable.replace("viewpoint OperationalActivity;", ""));
|
||||
let implicit = compile(&missing_viewpoint);
|
||||
let scenario = identity(project, "notification");
|
||||
assert!(matches!(implicit.decoded.project.elements[&scenario].body.shared(),
|
||||
Some(SharedBody::Scenario { viewpoint: ScenarioViewpoint::MixedLegacy, .. })));
|
||||
|
||||
let mut reduced_message = compiled.bundle.clone();
|
||||
reduced_message.files.insert("project.arcadia".into(), stable
|
||||
.replace("message_kind Asynchronous; reply_to none;", "")
|
||||
.replace("lifeline none;", ""));
|
||||
assert_eq!(compile(&reduced_message).decoded.project, *project);
|
||||
|
||||
std::fs::write(output.join("stabilized.arcadia"), stable).unwrap();
|
||||
std::fs::write(output.join("canonical.arcadia"), &canonical).unwrap();
|
||||
std::fs::write(output.join("renamed.arcadia"), &aliased.bundle.files["project.arcadia"]).unwrap();
|
||||
std::fs::write(output.join("reparented.arcadia"), &moved.bundle.files["project.arcadia"]).unwrap();
|
||||
std::fs::write(output.join("split-entry.arcadia"), &split.files["project.arcadia"]).unwrap();
|
||||
std::fs::write(output.join("participants.arcadia"), &split.files["participants.arcadia"]).unwrap();
|
||||
|
||||
println!("PASS: admission; stable and canonical round-trip; fresh/stable identity; raw alias rejection; command alias rewrite; nested reparent; cross-file move; source7 default probes");
|
||||
println!("objects={} elements={} relations={} diagrams={} artifacts={} traces={}",
|
||||
project.identities().len(), project.elements.len(), project.relations.len(),
|
||||
project.diagrams.len(), project.artifact_links.len(), project.traces.len());
|
||||
println!("authored_bytes={} stable_bytes={} canonical_bytes={} authored_lines={} stable_lines={} canonical_lines={}",
|
||||
input.len(), stable.len(), canonical.len(), input.lines().count(), stable.lines().count(), canonical.lines().count());
|
||||
println!("warnings={:#?}", compiled.diagnostics);
|
||||
}
|
||||
@@ -0,0 +1,94 @@
|
||||
# Executed comparison of baseline values and complete analysis cases
|
||||
|
||||
Codex-956atf `/root/semantics_critic`, 2026-09-11. Root assigned this bounded follow-up to the paired semantic review. Read current Gitea issue #1 through #117; announced ownership in #120. Owned only `harness/experiments/analysis-context-20260911/` and this report. Existing proposals, review, production and ledgers were untouched. Root approved the isolated std-only direct-rustc command; no Cargo, `target`, native application or package changes occurred.
|
||||
|
||||
## Result and recommendation
|
||||
|
||||
**Prefer B for the next engineering-study prototype:** explicit baseline property values/formulas plus one level of named case overrides. In this controlled maintenance task it produces identical results with materially less repeated authored state. Preserve an explicit complete frozen snapshot operation for studies that must stop following the baseline. D remains useful as that independent snapshot form and for studies deliberately maintaining unrelated assumptions.
|
||||
|
||||
This recommendation is based on executed semantic examples and text counts, not a measured human usability study or a final metamodel decision. A visible baseline, effective-case formula evaluation, distinguishable Missing/Clear operations, captured revision/provenance and complete freeze semantics are necessary conditions. Removing any of those to make B look simpler reintroduces concrete ambiguity demonstrated below.
|
||||
|
||||
## Method
|
||||
|
||||
The [standalone program](experiments/analysis-context-20260911/main.rs) generates and parses a small closed experiment dialect. B and D use the same property identities represented by stable symbols, same expression AST, pure function definitions, dependency checks and evaluator. B resolves an explicitly named baseline plus local overrides; D requires each selected case's complete bindings. There is no UI-selected or unnamed default case and no case-to-case inheritance. Both can evaluate unknown inputs without inventing zero.
|
||||
|
||||
Twenty fixed inputs are each 1,000 ms. Cases 1–20 have two varying inputs:
|
||||
|
||||
```text
|
||||
varying01 = 750 + 50 * (case_number - 1) ms
|
||||
varying02 = 1000 + 25 * (case_number - 1) ms
|
||||
total = sum(all 22 inputs)
|
||||
budget = total <= 22000 ms
|
||||
```
|
||||
|
||||
The independent arithmetic expectation is `total = 21750 + 75 * (case_number - 1)` ms. Cases 1–4 satisfy the check; case 20 gives 23,175 ms and violates it. B's first case explicitly names the baseline and overrides nothing; the other 19 override the two varying inputs. D contains all 22 input bindings in every case. Both also have result and check bindings.
|
||||
|
||||
Each context model is tested with inline expressions and with **shared pure reusable calculations**, so D is not penalized merely for repeating the threshold expression. Factored calls bind all arguments explicitly; definitions do not capture project properties. All accepted emitted source is parsed/validated and round-tripped to exact experiment AST equality. Deliberately invalid source is emitted separately as `*.rejected-study`.
|
||||
|
||||
Changes are made programmatically to the experimental AST and emitted as complete text, then parsed again. The experiment counts literal changed source lines using longest common subsequence. It does **not** count those changes as human actions, claim the syntax is Studio's, or pretend a generated source edit is an observed engineering task.
|
||||
|
||||
## Executed measurements
|
||||
|
||||
Final [results](experiments/analysis-context-20260911/generated/RESULTS.md): **218 assertions passed, process exit 0**.
|
||||
|
||||
| Variant | Initial lines | UTF-8 bytes | Binding rows | Change one shared fixed assumption: removed/added lines | Change threshold: removed/added lines |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: |
|
||||
| B, inline | 106 | 2,281 | 62 | 3 / 3 | 3 / 3 |
|
||||
| B, factored | 108 | 2,781 | 62 | 3 / 3 | 2 / 2 |
|
||||
| D, inline | 522 | 13,241 | 480 | 21 / 21 | 21 / 21 |
|
||||
| D, factored | 524 | 14,026 | 480 | 21 / 21 | 2 / 2 |
|
||||
|
||||
The fixed-assumption task changes `fixed01` from 1,000 to 1,200 ms across the active study. B edits one binding plus baseline/document revision lines. D edits twenty bindings plus its document revision line. Both correctly add 200 ms to every case and reduce the passing cases from four to one.
|
||||
|
||||
For the threshold task, changing 22,000 to 22,500 ms yields eleven passing cases in every variant. B-inline changes one baseline predicate. D-inline changes twenty predicates. **Factoring the predicate removes that difference:** B-factored and D-factored each change one function body and one document revision. This falsifies a blanket claim that D necessarily repeats every formula edit. It does not remove D's repeated fixed input values; factoring also increases initial text because the calls and parameter lists remain explicit.
|
||||
|
||||
Binding counts include the result and check. B has 24 baseline bindings and 38 override bindings; D has 20 × 24 = 480. The common property catalog is counted in emitted line/byte size. OA/SA subjects, labels, UUIDs and full type declarations are outside the experiment; these numbers cannot be substituted for complete product-source size.
|
||||
|
||||
## Concrete semantic counterexamples
|
||||
|
||||
| Operation or mistake | Executed B result | Executed D result | Implication |
|
||||
| --- | --- | --- | --- |
|
||||
| Change one fixed assumption for the whole active study | One baseline binding affects all twenty cases. | All twenty bindings must change; a negative control editing only the first changes only that case. | B reduces maintenance duplication. D's local isolation is useful when the cases intentionally represent independent assumptions. An atomic bulk editor could reduce D's actions, but not the duplicated source state. |
|
||||
| Evaluate an inherited formula in its definition context | Wrong baseline context gives 21,750 ms for case 20; correct effective-case context gives 23,175 ms. | Complete case expressions use their selected case's inputs directly. | B must resolve all property reads in the requested case, even when the formula originated in the baseline. “Inherit the already evaluated baseline result” is incorrect. |
|
||||
| Set the varying input override to `missing` | It shadows the known baseline input. Dependent total/check become Missing, with `varying01` as cause. | An explicit missing row also propagates Missing. | Missing is a real authored state, not an absent override or a false predicate. |
|
||||
| Remove that row | B clears the override and restores the baseline's 750 ms. Case 20 total becomes 22,225 ms. | A required missing binding row is a structural rejection. | Commands and text must distinguish Clear/Use baseline from Set missing. The same absent-map representation must not mean both. |
|
||||
| Clear an override whose baseline itself is missing | Result stays Missing; no fallback value is invented. | Not an inheritance operation. | B resolution terminates at one explicit baseline. It must not search another case or a payload default. |
|
||||
| Override `varying01 = total` | Effective case graph rejects a cycle, even though the baseline graph was valid. | The equivalent complete case also rejects. | B cannot validate only the baseline and override fragments independently. Dependency checks must see the fully resolved case. |
|
||||
| Point a case at another case | Rejects case-to-case inheritance. | Inheritance is forbidden. | This experiment's B benefit does not require a general inheritance graph. |
|
||||
| Copy a case and call it frozen | A shallow case copy still follows later baseline changes. | Inline D's complete copy remains independent; factored D still follows changed shared function bodies. | A freeze contract must capture the definition environment as well as values/formulas. D's complete input rows alone are insufficient once reusable definitions exist. |
|
||||
| Use a project property inside a supposedly pure function | Rejected. | Rejected. | Reuse does not secretly capture a current case, which would change the comparison. Recursive definitions also reject. |
|
||||
|
||||
The program explicitly calculates both the correct effective-case result and the wrong baseline-context value as a negative control. It does not implement the wrong behavior as an alternative acceptable evaluator.
|
||||
|
||||
## Frozen studies and provenance
|
||||
|
||||
The experiment's freeze operation creates a complete independent D-style document containing the selected case's effective bindings, expression ASTs, the copied pure definition environment, captured input/formula row origins and original document/baseline revision identity. It keeps explicit Missing inputs. Changes to the original baseline and threshold functions leave the frozen observation unchanged. The frozen file parses and reproduces its exact experimental state without access to the original active study.
|
||||
|
||||
See [frozen B case 20](experiments/analysis-context-20260911/generated/B-factored-frozen-case20.study) and [active B provenance](experiments/analysis-context-20260911/generated/B-factored-provenance.md). The latter identifies fixed inputs and result/check formulas as `baseline:engineering@1 via case20`, and varying inputs as `case:case20`. Frozen observations retain their captured origins with an explicit `frozen:` marker. All 24 effective bindings retain an origin.
|
||||
|
||||
This is intentionally a larger snapshot than an active B case. Freezing removes future propagation by capturing actual dependencies; it cannot honestly be reduced to a copied case name or cached result. Both the fixed input and pure definition changes were applied after capture. Inline D already has isolated values/formulas, which is its clearest advantage; shared calculation definitions introduce the same capture obligation for D.
|
||||
|
||||
The experiment's provenance strings are observations produced by the fixture/evaluator, not a secure import or history authority. Production provenance still needs stable typed identities, exact accepted document/source references and validated snapshot origin. The program does not test UUID renaming, package trust, artifact identity or historical remapping.
|
||||
|
||||
## Remaining counterexamples and conditions on the recommendation
|
||||
|
||||
1. **Propagation is a visible engineering decision.** In B, the source of an unchanged case can remain byte-identical while its result changes after a baseline edit. Before adopting B, the native/source workflows must expose the named base and show the affected cases or result revision. A cache keyed only by a case's own text would be invalid. The experiment supplies document/baseline provenance but does not test a real asynchronous UI cache.
|
||||
2. **Frozen evidence must capture external definitions.** The experiment copies its complete small function environment. Real units/calculations imported from packages need exact pins and retained bytes. A frozen binding graph referring to mutable ambient definitions remains live, whichever context model is chosen.
|
||||
3. **Thresholds can be factored in D.** The comparison supports B's reduction of repeated assumptions; it does not establish that D always repeats computation definitions. Avoid justifying B with that stronger, falsified claim.
|
||||
4. **Independent studies may prefer D.** If the twenty fixed assumptions are intentionally independent measurements rather than one shared design assumption, B's propagation is unwanted. Explicit independent/frozen studies cover that use case; silently turning every case into a live override would be misleading.
|
||||
5. **Actual authoring remains unmeasured.** A visible “Use baseline” control might be clearer than twenty copied values, or engineers may misunderstand inherited formulas. The next native/text task must measure wrong-context changes, recovery and comprehension. This experiment cannot provide human timings, UI clarity, large-project latency or accessibility evidence.
|
||||
6. **Metamodel integration is still open.** Subject ownership, OA/SA transitions, library pattern closure, check identity, quantity compatibility and source normalization require root's paired-contract decisions. The tiny interpreter is not a substitute for those contracts. Do not import it into production merely because its examples pass.
|
||||
|
||||
The narrow conclusion is that **one-level explicit B is a stronger active-study candidate than compulsory complete-case D for shared-assumption maintenance**. A complete independent snapshot remains useful. This yields a concrete next prototype, not an argument for arbitrary inheritance or hidden defaults.
|
||||
|
||||
## Exact execution evidence and reproduction
|
||||
|
||||
- Compiler: `rustc 1.98.1 (48a229cea 2026-09-01)`, commit `48a229ceaefd4985c50990b14116b6d856af0985`, host `x86_64-pc-windows-gnullvm`, LLVM 22.1.8.
|
||||
- Compile: std-only `rustc --edition=2024 -D warnings -C linker=clang.exe`; no warnings or errors in the completed final build.
|
||||
- Final program SHA256: `5632ACAFD06413DCC9961DDC1ADE60C7556FB56B43ED3C667F5106E7559A3733`.
|
||||
- Executable: `.local/analysis-context-20260911/analysis-context.exe`; SHA256 `36E2D5A7F0683CC19F2EB50CA4840F3A793A8350498E3E17EDD75710A78FC675`.
|
||||
- Results SHA256: `248419751E9B836CDE6D80F97202843DD5DC085D1BEC67CB2FCC5046960C143B`.
|
||||
- Final process exit: **0**; **218 assertions passed**. Each assertion count is an experiment check, not a count of independent production tests.
|
||||
- [Evidence manifest](experiments/analysis-context-20260911/generated/EVIDENCE.json) records all 29 emitted source fixture hashes, commands and UTC recording time. [README](experiments/analysis-context-20260911/README.md) gives the complete repeatable commands.
|
||||
|
||||
All runtime outputs are confined to the owned experiment directory, with the executable isolated under `.local`. Existing Studio tests and release acceptance were not rerun or claimed by this task. Root retains the final semantic choice and implementation ownership.
|
||||
@@ -0,0 +1,366 @@
|
||||
# Analysis semantics: competing designs and a bounded proposed contract
|
||||
|
||||
Codex-956atf `/root/requirements_delta`, 2026-09-10, finalized 2026-09-11. Design proposal for root synthesis and independent criticism, **not a ratified decision, implementation, or release acceptance**. Sole output of this assignment is this file. No production edits, Cargo or native execution. Read Gitea coordination through #81 before starting and through #101 on resuming; announced this work in #83. Coordinated neutral-definition identity and immutable import assumptions with `/root/libraries_design`; incorporated the paired critic's numeric serialization counterexample and library compatibility concern. Root retains build/native ownership.
|
||||
|
||||
The authoritative user objective and the delta evidence are recorded in `PROJECT_GOAL.md` and `release-requirements-delta-20260910.md`. This report examines the actual core at `8547b85` and its unchanged analysis-relevant predecessors. The current Constraint/MessageValue expressions remain prose; DataType/DataField units remain strings. This proposal must not reinterpret those existing records during migration.
|
||||
|
||||
On resuming, read the full replacement objective at `C:/Users/User/.codex/attachments/a49d1780-25d5-4778-ad68-6140c60e4207/goal-objective.md` (SHA-256 `DD58F75C93D55FE16ED141A23D834898FB6EBC625AE7E7AE379DA552A8312435`). Its explicit requirements for low-clutter notation, reduced cognitive load, human/AI editing and complete small/large model development through text strengthen the authoring gates in sections 3.4 and 7. This design update is not a fresh production audit of the concurrently changing checkout.
|
||||
|
||||
## 1. The decision and its evidence
|
||||
|
||||
The key question is whether a numerical value belongs directly to a modeled subject, to one explicit analysis case, or to a subject declaration plus case-specific assignment. A second question is how much mathematics the first release must execute. Neither question is settled by having a text field called `expression`.
|
||||
|
||||
Capella's official material identifies properties, expressions and dimensions and describes analysis through viewpoints. Its mass/cost/latency examples support useful architectural analysis without requiring behavioral simulation. [Capella comparison](https://mbse-capella.org/arcadia_capella_sysml_tool.html#parametric), [Capella features](https://mbse-capella.org/features.html)
|
||||
|
||||
SysML 2.0 separates calculation definitions/applications, Boolean constraints and quantity/unit concepts. Its calculation semantics include pure reusable computations; its quantity treatment distinguishes a quantity kind from a particular unit. Those distinctions inform this proposal; they do not make the proposed Studio language SysML-conformant. [OMG language specification, §§7.8, 7.19, 7.20 and 9.8](https://www.omg.org/spec/SysML/2.0/Language/PDF)
|
||||
|
||||
For the temperature falsifier below, BIPM defines the Celsius/Kelvin numerical relationship with the exact offset 273.15 and distinguishes temperature values from intervals. The proposed affine algebra is a Studio design interpretation of that distinction. [BIPM SI Brochure, ninth edition, temperature discussion](https://www.bipm.org/documents/20126/41483022/SI-Brochure-9-EN.pdf/2d2b50bf-f2b4-9661-f402-5f9d66e4b507?version=4.0)
|
||||
|
||||
The implementation constraints are concrete:
|
||||
|
||||
- `model.rs:603–617,651` contains current unit/expression metadata; `parent_permits` (`validation.rs:92`) permits DataFields only in data/item structures. A payload type default must not become a system property value accidentally.
|
||||
- `Project::layer_of` follows an Element's layer or a Relation's source (`model.rs:1803`). There is no neutral modeling layer. New reusable definitions must not masquerade as OA or relax all existing same-layer checks.
|
||||
- `prepare_command` clones, applies a complete batch, finishes deletion handling, validates, then returns the candidate (`session.rs:185`). This is the mutation boundary to retain.
|
||||
- `visit_element_refs` currently visits live UUID references; expression text has no visited references (`references.rs:17–152`). Actual expression references require a typed visitor, not text search.
|
||||
- Transition closure follows references and selected ownership (`transitions.rs:447–606`); `inferred_kind` has a closed catalog. New property/case/check semantics will not transition automatically merely because they use SharedBody.
|
||||
- Historical review is a closed typed vocabulary (`semantic/types.rs:88–155`). New live references and historical observations require different validation rules, as in existing source5–7 history.
|
||||
|
||||
Paths above are under `crates/oa-core/src`.
|
||||
|
||||
## 2. Alternatives and provisional ranking
|
||||
|
||||
Ratings below are engineering judgments to be falsified by examples and native tasks, not measurements.
|
||||
|
||||
| Architecture | Simple property/budget | Alternative assumptions | Meaning and automation | Main cost |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| A. Directly owned value/expression; no cases | Best initial simplicity. One property contains its value or derived expression. | Requires editing the one model state or copying declarations/projects. | Clear single-state meaning; weak support for simultaneous alternatives. | Adding cases later may reinterpret every property read. |
|
||||
| B. Directly owned baseline value plus explicit override cases | Good initial simplicity; ordinary properties work without a case. | Case chooses a base and stores local overrides. Unchanged properties follow the base. | Viable if every resolved input reports its origin and inheritance rules are explicit. | Two value locations, inherited-change effects, override clearing versus unbound values, and derived-value lookup across scopes. An explicit `UseBase(property)` binding avoids implicit fallback but adds records/actions. |
|
||||
| C. Case-owned values with optional subject annotations; no reusable property declarations | A case can be a compact typed worksheet. | Each case owns independent columns/values. | All inputs are explicit and isolated. | “The same system property” in two cases has no stable shared identity without another correspondence mechanism. |
|
||||
| D. Subject property declarations plus complete explicit case bindings | One extra named case concept; no value is stored on the property declaration. Inline formulas suffice for small tasks. | The same declaration can have different, visibly separate bindings in nominal/degraded cases. No inheritance or fallback. | Stable property identity, explicit assumptions, one value location per case/property, simple pure evaluation. | More semantic records and source declarations; UI must make the common task one coherent action instead of several catalog detours. |
|
||||
|
||||
**Provisional preference: D**, because stable property identity and explicit assumptions support engineering studies and cross-project reuse without implementing override inheritance. This preference is conditional on the low-overhead workflows below. B is a credible competitor, not a straw man. If native comparison shows that engineers mostly enter context-independent facts and D forces repeated case creation or input copying, prefer B with explicit base provenance and a precisely defined override contract, or revisit a visible `UseBase` form. Do not add an invisible “default case” to rescue D; that would change the chosen semantics.
|
||||
|
||||
Reusable calculation definitions are orthogonal to A–D. A small budget must support an inline expression. Requiring a reusable function definition, parameter list and application before adding two durations would be unnecessary authoring overhead. “Make reusable” can be a later explicit transformation of a selected expression.
|
||||
|
||||
### Numerical alternatives
|
||||
|
||||
| Domain | Exact decimal budgets and large integers | Degrees/radians and ordinary functions | Reproducibility / cost | Disposition |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| Q. Bounded exact rational scalar algebra | Exact within stated size limits; `0.1 + 0.2 == 0.3` and rational divisions are unambiguous. | Cannot generally evaluate π-based conversion, sine, cosine, logarithms or irrational roots. Must report Unsupported. | Small, precise arithmetic contract; bounded big-integer implementation required. | Good **first implementation slice**, insufficient evidence for broad common-unit/calculation usability. |
|
||||
| F. Finite binary64 throughout | Decimal rounding and large-integer loss require care. Existing i64 rules must stay independent. | Familiar engineering functions and approximate angular conversion are practical. | Must fix conversion, rounding, math function behavior and comparison policy; CPU/library differences need measured bounds. | Plausible simpler release choice if ordinary numerical breadth dominates exactness. |
|
||||
| Q+F. Explicit exact and approximate domains | Exact calculations stay exact; approximation occurs at a visible domain boundary. | An implemented approximate domain handles angles and transcendental functions with explicit result labeling/policy. | More type/evaluation rules and two conformance suites. No implicit approximate-to-exact conversion. | Preferred **target for further release design**, conditional on a justified, independently verified approximate profile. |
|
||||
|
||||
This report formalizes Q as a bounded foundation. It does **not** claim that Q alone satisfies the user's complete calculations/quantities requirement. The approximate profile remains a consequential design/acceptance item, not a harmless future convenience. In particular, an everyday `30 deg → rad` or `sin(30 deg)` request must either run under an implemented approximate domain or receive a precise Unsupported result. A decimal constant pretending to be exact π is unacceptable.
|
||||
|
||||
Before implementing F, compare a portable pinned Rust math implementation against platform intrinsics using reference values and documented error limits. Select rounding, supported function domains, signed-zero behavior, overflow/underflow and comparison semantics explicitly. Approximation labeling is not an error bound; a user-supplied engineering tolerance is not automatically a proof of numerical accuracy. Do not implement approximate equality by an undocumented global epsilon. That work is outside this exact first slice and must remain open in the release ledger.
|
||||
|
||||
## 3. Proposed model and low-overhead authoring
|
||||
|
||||
### 3.1 Meanings
|
||||
|
||||
An **EngineeringProperty** declares what scalar or finite scalar collection is associated with an existing semantic subject and its type. It stores no value/default. Its subject is an existing Element or Relation in the same layer, excluding analysis records themselves. Using an explicit typed subject reference supports an exchange's latency as well as a function's duration without pretending a Relation can be an Element parent.
|
||||
|
||||
An **AnalysisCase** names one set of input assumptions and derived bindings in one layer. It maps property identity to an expression or an explicit unbound value. A property read always means that property's binding in the named case. There is no lookup in another case, payload default, selected diagram, active UI state or external file. Case subject is optional explanatory focus, not an implicit namespace or lookup scope.
|
||||
|
||||
An **AnalysisCheck** is an identified, case-owned Boolean predicate. It may link an existing descriptive Constraint as its documented requirement. The old Constraint's prose remains prose; the new check supplies the formal assertion in an explicit case. Several checks/cases may reference the same documented Constraint. A check without that link still expresses a formal engineering constraint.
|
||||
|
||||
A neutral **CalculationDefinition** has stable typed parameters, a declared result and an optional pure expression body. A Boolean-valued reusable calculation can supply a predicate to a check. Definitions may call other definitions but cannot capture project properties, cases, UI selection, files, clocks or mutable external state.
|
||||
|
||||
### 3.2 Concrete Rust sketch
|
||||
|
||||
The names below are proposed, not existing public APIs. Closed Serde records and duplicate-key rejection follow current conventions.
|
||||
|
||||
```rust
|
||||
// Proposal: three new Kind/SharedBody variants, using existing Element identity.
|
||||
enum AnalysisSubject { Element(Id), Relation(Id) }
|
||||
|
||||
enum ScalarType {
|
||||
Boolean,
|
||||
Number, // Q1: exact rational
|
||||
Quantity(DefinitionRef), // must resolve to a QuantityKind
|
||||
}
|
||||
enum AnalysisType { Scalar(ScalarType), List(ScalarType) } // no nested lists
|
||||
|
||||
// SharedBody additions:
|
||||
EngineeringProperty {
|
||||
subject: AnalysisSubject,
|
||||
value_type: AnalysisType,
|
||||
display_unit: Option<DefinitionRef>, // compatible quantity kind; no value/default
|
||||
},
|
||||
AnalysisCase {
|
||||
subject: Option<AnalysisSubject>,
|
||||
bindings: BTreeMap<Id, Option<Expr>>, // key is EngineeringProperty identity
|
||||
},
|
||||
AnalysisCheck { documented_constraint: Option<Id>, predicate: Option<Expr> },
|
||||
|
||||
// Project gets a separate neutral definition catalog, coordinated with libraries.
|
||||
enum DefinitionRef {
|
||||
Local(Id),
|
||||
Imported { import: Id, package: PackageId, member: Id },
|
||||
}
|
||||
struct Parameter { id: ParameterId, name: String, value_type: AnalysisType }
|
||||
struct CalculationDefinition {
|
||||
parameters: Vec<Parameter>,
|
||||
result: AnalysisType,
|
||||
body: Option<Expr>,
|
||||
}
|
||||
|
||||
struct Exact { numerator: CanonicalInteger, denominator: CanonicalPositiveInteger }
|
||||
// Wire representation is canonical decimal strings, not JSON floating numbers.
|
||||
struct Dimension([i16; 7]); // length, mass, time, current, temperature, amount, luminous intensity
|
||||
enum QuantityAlgebra { Linear, Affine { difference_kind: DefinitionRef } }
|
||||
struct QuantityKindDefinition { dimension: Dimension, algebra: QuantityAlgebra }
|
||||
struct UnitDefinition {
|
||||
kind: DefinitionRef,
|
||||
scale: Exact, // strictly positive in Q1
|
||||
offset: Exact, // zero for a Linear kind
|
||||
symbol: String, // presentation; never identity
|
||||
}
|
||||
|
||||
enum Expr {
|
||||
Boolean(bool), Number(Exact),
|
||||
Quantity { magnitude: Exact, unit: DefinitionRef },
|
||||
Property(Id), Parameter(ParameterId), List(Vec<Expr>),
|
||||
Unary { op: UnaryOp, operand: Box<Expr> },
|
||||
Binary { op: BinaryOp, left: Box<Expr>, right: Box<Expr> },
|
||||
If { condition: Box<Expr>, when_true: Box<Expr>, when_false: Box<Expr> },
|
||||
Call { definition: DefinitionRef, arguments: BTreeMap<ParameterId, Expr> },
|
||||
Sum { values: Box<Expr>, initial: Box<Expr> },
|
||||
Power { base: Box<Expr>, exponent: i8 },
|
||||
AsKind { kind: DefinitionRef, value: Box<Expr> },
|
||||
}
|
||||
```
|
||||
|
||||
EngineeringProperty and AnalysisCase are layer-root Elements. AnalysisCheck requires parent AnalysisCase. The subject relationship is explicit reference association, not an extra containment rule. Property ownership/attachment is therefore visible in the Properties/Analysis presentation even though it is not an Element child of its subject. If user testing instead requires the property to participate in semantic containment, revisit this choice explicitly; do not give `parent` two meanings.
|
||||
|
||||
`display_unit` is permitted only for a quantity scalar or quantity list and must have the property's resolved kind. It chooses result presentation, not input interpretation or a default value. A source literal retains its own magnitude/unit. Without a requested display unit, the wire result remains a canonical coordinate plus resolved kind; the UI must not invent a unit symbol. The Add value/budget forms can explicitly set this field from the visible unit choice.
|
||||
|
||||
Parameter IDs are scoped to the defining CalculationDefinition and remain stable through rename. They are not ordinary project Element references. A call's argument keys must exactly match the definition's parameter IDs. Wrong/missing/duplicate argument keys reject; an input whose value is not known is represented by a case binding set to `None`, not an invalid argument map. Empty calculation bodies/check predicates are admitted incomplete records with warnings.
|
||||
|
||||
### 3.3 Minimum GUI and source work
|
||||
|
||||
For one new property/value, the proposed minimum GUI operation is: select the modeled subject, choose **Add analysis value**, enter name/value/unit, and choose or visibly name the case. One final Create applies a batch creating the property, a new named case when needed, and its binding. The form states the case name and resulting records. Creating “Nominal” is explicit model creation, not implicit fallback. Existing cases are chosen by context, with alternatives visible. No separate global-catalog visit is required.
|
||||
|
||||
For a two-duration budget, one compact **New budget** form can show case name, two named input rows with subjects/units, the result expression and threshold. One Create reserves all new IDs and applies one reviewed batch: three properties, one case with three bindings and one check. A reusable definition is not mandatory. Subsequent editing shows nominal and alternative case values side by side or under an explicit case selector; the result always bears its case name. Outside an analysis workspace, a property inspector lists its case values with names rather than silently displaying one “current” value.
|
||||
|
||||
Local neutral definitions can make the source self-contained; library imports may supply the same definitions instead. Proposed syntax, not accepted by source7:
|
||||
|
||||
```text
|
||||
quantity_kind duration "Duration" {
|
||||
dimension [0, 0, 1, 0, 0, 0, 0]; algebra Linear;
|
||||
}
|
||||
unit s "Second" { kind @duration; scale 1; offset 0; symbol "s"; }
|
||||
unit ms "Millisecond" { kind @duration; scale 0.001; offset 0; symbol "ms"; }
|
||||
```
|
||||
|
||||
The source cost for one property/value is two declarations, using those unit definitions:
|
||||
|
||||
```text
|
||||
oa_property receive_time "Receive time" { subject @receive; type Quantity(@duration); display_unit @ms; }
|
||||
oa_analysis nominal "Nominal" { bindings { @receive_time = 750 [@ms]; } }
|
||||
```
|
||||
|
||||
The two-case budget can remain concise without inventing a reusable function:
|
||||
|
||||
```text
|
||||
oa_property receive_time "Receive time" { subject @receive; type Quantity(@duration); }
|
||||
oa_property dispatch_time "Dispatch time" { subject @dispatch; type Quantity(@duration); }
|
||||
oa_property total_time "Total time" { subject @respond; type Quantity(@duration); display_unit @s; }
|
||||
oa_analysis nominal "Nominal" {
|
||||
bindings {
|
||||
@receive_time = 750 [@ms];
|
||||
@dispatch_time = 1 [@s];
|
||||
@total_time = @receive_time + @dispatch_time;
|
||||
}
|
||||
}
|
||||
oa_analysis degraded "Degraded radio" {
|
||||
bindings {
|
||||
@receive_time = 1250 [@ms];
|
||||
@dispatch_time = 1 [@s];
|
||||
@total_time = @receive_time + @dispatch_time;
|
||||
}
|
||||
}
|
||||
oa_check nominal_budget "Nominal budget" {
|
||||
parent @nominal; predicate @total_time <= 2 [@s];
|
||||
}
|
||||
oa_check degraded_budget "Degraded budget" {
|
||||
parent @degraded; predicate @total_time <= 2 [@s];
|
||||
}
|
||||
```
|
||||
|
||||
Optional explicit reuse adds a neutral definition and changes a binding expression:
|
||||
|
||||
```text
|
||||
calculation combine "Combine durations" {
|
||||
input a : Quantity(@duration);
|
||||
input b : Quantity(@duration);
|
||||
result Quantity(@duration);
|
||||
expression $a + $b;
|
||||
}
|
||||
// In one case: @total_time = @combine(a: @receive_time, b: @dispatch_time);
|
||||
```
|
||||
|
||||
Ordinary declaration UUID stabilization follows the existing source identity rule. The proposed authoring form extends optional initial IDs to calculation parameters: accepting a new parameter allocates its ID once, and the accepted source retains it, for example `input a id "10000000-0000-4000-8000-000000000001" : Quantity(@duration);`. This extension is a proposal, not existing source7 behavior. The short examples show initial authored text, not the more verbose stabilized file. Retaining established IDs is required for rename and history; deleting an ID is not a rename mechanism. Stabilization must be available through the shared source admission service without creating records in a GUI. Missing-ID diagnostics and the inserted IDs must be reviewable by a text-only client.
|
||||
|
||||
`$name` resolves only a parameter of the current definition. `@name` in value position resolves a case property; `@name(...)` resolves a calculation; `[@name]` resolves a unit. Imported qualified spelling is delegated to the library grammar. Duplicate binding keys reject. Names are parsed to stable IDs, and an accepted rename updates the relevant tokens. `none` is permitted as an entire binding/body/predicate hole, never as an arithmetic scalar. Parentheses, unary operators, multiply/divide, add/subtract, comparisons, `&&`, `||`, and conditional expressions require explicit precedence in the normative extension; comparisons are non-associative, so chained comparisons reject. Quoted prose is never implicitly parsed as this expression language.
|
||||
|
||||
To test D against B, compare first-property creation, a two-input budget and a nominal/degraded change in both a small and a dense model. Proposed acceptance: D needs no additional page change and at most one additional context-choice action for the first case; editing an existing case needs no extra case-creation action. If D repeatedly requires recreating declarations or reentering unchanged inputs where B would show clear inheritance, its claimed simplicity is falsified. Record task completion/time and wrong-context errors, not just click counts.
|
||||
|
||||
### 3.4 Text-only development and cognitive load
|
||||
|
||||
The source examples are a minimum analysis fragment assuming existing subjects `receive`, `dispatch` and `respond`; they do not prove that an entire model can be authored through text. The acceptance fixture must include those OA/SA subjects and all other referenced records, local definitions or explicit supplied package imports, with no prerequisite GUI-created records. Adding a case, defining/reusing a calculation, declaring a quantity/unit, inspecting a missing input and correcting a constraint must all be possible from the published language and API alone.
|
||||
|
||||
| Text-authoring concern | Proposed treatment and falsification gate |
|
||||
| --- | --- |
|
||||
| First useful calculation | Inline arithmetic and local definitions are sufficient; a reusable definition or library publication is optional. An engineer can create the one-value and two-duration examples from a blank source bundle using documented admission, with no form-only operation. |
|
||||
| Identity noise | Initial authoring may omit newly allocated IDs; references use readable aliases. Stable IDs remain in accepted declarations and must round-trip. Evaluate both initial and stabilized files; omitting UUIDs from this report is not evidence that the real files are uncluttered. Folding is supplementary, not a requirement for understanding an ordinary editor's text. |
|
||||
| Hidden context | Every binding has one explicit case. Property names, unit references and case blocks carry meaning; they must not be removed merely to shorten text. A property read cannot fall back to another case or UI selection. A diagnostics client can locate the case, property and expression token responsible. |
|
||||
| Repetition across cases | D repeats unchanged inputs and derived expressions. With 1,000 applicable properties and 20 complete cases, that can mean 20,000 binding rows. This is a material design cost, not solved by a search box or collapsed list. Compare B's baseline plus explicit overrides using the same task and provenance display; reverse D's preference if repetition dominates comprehension or causes divergent copied formulas. |
|
||||
| Locality and file organization | Existing explicit source bundles/includes should let authors group properties/cases/definitions into files. Analysis extensions must retain exact authored bytes and targeted token edits, with stable references after a declaration moves between supplied files. Splitting files alone does not solve the current global alias namespace's cognitive cost; scoped naming would need a separate deliberate language decision. |
|
||||
| Reuse without expanded clutter | Local calculations and pinned imported definitions need one documented reference form each, with no duplicated editable expansion of sealed definitions. Package transport and import spelling remain shared library-design obligations. A text-only engineer must be able to supply the declared package bytes and pins, not rely on an invisible desktop cache. |
|
||||
| Meaningful notation | The seven-entry dimension vector is compact but opaque without its fixed order. Compare it with named nonzero dimensions such as `dimension { time: 1; }` before freezing syntax. The latter is an alternative spelling proposal, not a second admitted grammar. Similarly, repeated `bindings` wrappers and prefix-heavy declarations warrant user comparison; do not add shorthand whose case or type resolution becomes implicit. |
|
||||
| Human and AI edits | The normative extension must define precedence, name resolution, ID retention, canonical exact literals and located diagnostics, and provide complete examples. A client following that specification must predict admission and evaluation without private Rust structures or GUI state. A one-input edit should leave unrelated source bytes and accepted identities unchanged. |
|
||||
|
||||
Use two authoring evaluations after the semantic choice: a complete small OA/SA example and a generated dense source bundle containing at least 1,000 properties, 20 cases and 100 reusable definitions. Those are proposed stress fixtures, not claims about current capacity. Record source size, changed lines for one assumption, task completion, wrong-case edits, diagnostic locality, and parse/apply/evaluate latency under stated hardware. Include moving a definition between files, a parameter rename retaining identity, adding an alternative, a deliberately invalid unit change followed by repair, and portable save/reopen. Compare D with B before treating D's source ergonomics as settled. A larger standalone textual workflow audit is outside this assignment.
|
||||
|
||||
## 4. Bounded Q1 semantics
|
||||
|
||||
### 4.1 Admission and expression typing
|
||||
|
||||
An accepted case may contain explicit unbound inputs, empty definition bodies and empty checks with completeness warnings. Every live property/unit/kind/calculation/constraint/subject reference must resolve to the correct kind. Every property reference reachable from a case expression must have a binding row in that case; its row may be `None`. Missing rows are a structural error, which a graphical planner can resolve by explicitly adding visible unbound input rows in the same batch. Unknown identities, wrong types, recursive definitions and cyclic case-property dependencies reject the whole candidate. A definition may use parameters and other definitions, never `Property` nodes.
|
||||
|
||||
Calculation call graphs and case dependency graphs must be acyclic even if a syntactic branch is currently unused. Both branches/operands are statically type checked. Dynamic `if`, `&&` and `||` use ordinary left-to-right conditional evaluation: only a known condition/left Boolean can select or short-circuit. A missing/error condition propagates; it is not converted to false. Thus `true || unknown` is true because the unknown branch is unnecessary, while `unknown || true` remains unresolved under this explicitly ordered evaluation contract. Reports identify the dependencies actually consulted. That distinction needs source/UI guidance and a falsifier test.
|
||||
|
||||
Lists are finite, flat and homogeneous. Empty list typing comes from a declared target/parameter type. Sum takes a homogeneous numeric or linear-quantity list and an explicit typed initial value; empty sum returns that initial value. There is no implicit “sum all children,” open-ended query or dynamic collection discovery. Property aggregation over architecture topology is a separate future design, not an assumed behavior of `sum`.
|
||||
|
||||
### 4.2 Exact numbers
|
||||
|
||||
Q1 represents a rational as normalized integers `n/d`, `d > 0`, gcd 1, with zero represented only as `0/1`. Canonical wire integers have no plus sign or leading zeroes. Decimal source literals are converted arithmetically to rationals; they never pass through f64. The canonical writer can always emit an integer when `d == 1` or `ratio(n, d)` otherwise; `ratio` is a literal constructor, and division is a separate expression operation. Authored decimal spelling is preserved by ordinary source editing. A terminating decimal may be longer than the allowed literal token, so canonical serialization must not insist on decimal expansion. Noncanonical wire rationals reject instead of being silently rounded or ambiguously compared.
|
||||
|
||||
Proposed reference profile: at most 4,096 bits for each reduced numerator/denominator, 1,234 decimal digits in a numeric token's mantissa or canonical ratio component, absolute decimal exponent at most 128, expression depth at most 128, at most 65,536 expression nodes per case/definition closure, list length at most 1,024 and call depth at most 32. Signs and punctuation are not decimal digits. The actual 4,096-bit bound still applies; not every 1,234-digit integer fits. Integer powers are limited to -16 through 16. These are reviewable engineering limits, not measured performance claims. Operations use bounded intermediates, normalize and then enforce the stated result bound; inputs and temporary allocation are bounded before multiplication/division. Crossing a computational bound reports NumericLimit, never a truncated value.
|
||||
|
||||
Source, wire and model admission must share these value limits. The earlier 256-digit source proposal was inconsistent with a 4,096-bit admitted literal and is rejected: an accepted `Expr::Number` containing `10^300` must serialize back to the same literal AST. The integer/ratio fallback avoids the exponent bound and also handles, for example, `1 / 2^4095` without emitting 4,095 fractional digits. Exact values at both 4,096-bit boundaries must survive model-to-source-to-model and JSON round-trips; a formatter may not rewrite a literal into an arithmetic AST to evade its literal limits.
|
||||
|
||||
Addition/subtraction/multiplication/division and bounded integer powers are exact. Division by zero and zero to a negative power fail evaluation. `0^0` is explicitly rejected in Q1. Comparisons use rational arithmetic; no global epsilon exists. Existing DataValue::Integer remains i64 and retains its current precision/boundary rules. There is no automatic binding to payload type defaults and no implicit conversion of an analysis result into DataValue; a future adapter must check integrality/range/type exactly.
|
||||
|
||||
Unary minus/absolute value accept Number or linear quantity; logical negation accepts Boolean. Arithmetic and ordering reject Booleans/lists. Equality/inequality accepts matching Boolean types or compatible numerical scalar types; list equality is outside Q1. Number plus quantity and implicit conversion from a named dimensionless kind to Number reject. Quantity divided by Number preserves the quantity kind; Number divided by a linear quantity yields an anonymous inverse dimension. A quantity power of one preserves its kind, power zero gives Number one when defined, and other powers yield anonymous dimensions. These typing rules apply before evaluation; their numeric zero-domain failures are evaluated separately.
|
||||
|
||||
### 4.3 Quantities and units
|
||||
|
||||
Quantity kind identity is the resolved definition identity, not its name, symbol or seven-dimensional vector. Two different kinds may share a dimension and still be incompatible. A unit's declared kind must match the value's type. In Q1, canonical coordinate is `magnitude * scale + offset`. Linear units require zero offset. Affine units belong to an affine kind with a declared linear difference kind of the same dimension; both coordinates use the same coherent scale basis. Type checking verifies dimension components and arithmetic exponent bounds.
|
||||
|
||||
| Operation | Q1 rule |
|
||||
| --- | --- |
|
||||
| Linear add/subtract/compare | Same resolved kind required; convert coordinates exactly. |
|
||||
| Affine point minus point | Same affine kind; result has its declared linear difference kind. |
|
||||
| Point plus/minus interval | Interval must have that affine kind's difference kind; result is a point. Interval plus point is allowed. |
|
||||
| Point plus point, interval minus point, point multiply/divide/power | Reject as an invalid operation. Comparisons between points of the same affine kind are allowed. |
|
||||
| Number scaling a linear quantity | Preserve kind, with exact scalar scaling. |
|
||||
| Product/quotient of different linear quantities | Produce an anonymous derived dimension. Do not guess a named physical kind. |
|
||||
| Linear quantity divided by the same kind | Produce an exact dimensionless Number. |
|
||||
| `AsKind(kind, value)` | Only an anonymous derived result with matching dimension can acquire the explicitly chosen linear kind. It cannot silently convert an already named kind into another named kind. |
|
||||
| Conversion between units | Same resolved kind; exact scale/offset rules. Changing display unit does not mutate the authored literal or its magnitude. |
|
||||
|
||||
`Dimension` exponents are ordered exactly as in the Rust sketch and each admitted component is bounded to -32 through 32. An anonymous derived quantity is an intermediate result, not a declared property/parameter type; assigning it to a named result requires explicit AsKind. This is deliberately more explicit than using dimensional equality to label force-times-distance automatically as either energy or torque. Revisit this authoring burden if a catalog of unambiguous registered kind operations can be independently specified and justified.
|
||||
|
||||
Q1 does not admit logarithmic units or nonrational scale factors. A prospective π-based UnitDefinition must not be represented by a rational approximation with an “exact” label. An approximate-domain extension needs a distinct scale/expression representation and a corresponding profile; its source/JSON form and numerical guarantees remain an open design item. Until then degree/radian conversion and transcendental functions receive Unsupported in the capability/workflow layer; unknown syntax in strict source remains a located rejection. This limit is material to release scope.
|
||||
|
||||
### 4.4 Outcomes and revision identity
|
||||
|
||||
Admission and evaluation are different operations. An unmet engineering requirement does not make a structurally valid model unsavable.
|
||||
|
||||
```rust
|
||||
enum ValueOutcome {
|
||||
Value(AnalysisValue),
|
||||
Missing { inputs: Vec<InputLocation> },
|
||||
Unsupported { operation: String, required_domain: String },
|
||||
Failed { diagnostics: Vec<EvaluationDiagnostic> },
|
||||
}
|
||||
enum CheckOutcome {
|
||||
Satisfied,
|
||||
Violated,
|
||||
Unresolved { causes: Vec<EvaluationCause> },
|
||||
}
|
||||
struct EvaluationReport {
|
||||
case: Id,
|
||||
model_snapshot: SnapshotIdentity,
|
||||
definition_environment: EnvironmentDigest,
|
||||
numeric_profile: ProfileId,
|
||||
values: BTreeMap<Id, ValueOutcome>,
|
||||
checks: BTreeMap<Id, CheckOutcome>,
|
||||
}
|
||||
```
|
||||
|
||||
Public `AnalysisValue` is a Boolean, an Exact Number, a quantity `{resolved_kind, canonical_coordinate: Exact}`, or a homogeneous flat list carrying its resolved element type. Anonymous derived dimensions are internal intermediates only: a declared result/property must acquire its explicit kind before it can produce a public value. Quantity display conversions accompany that result as derived presentation and never replace the authored literal. JSON represents every Exact numerator/denominator as canonical decimal strings, including converted display values.
|
||||
|
||||
Cause collections are nonempty for every nonvalue outcome, deduplicated and stably ordered. Missing includes absent input values or admitted empty definition/check bodies. Unsupported is distinct from a failed supported operation such as division by zero. A check returns Satisfied/Violated only for an evaluated true/false Boolean; the other value outcomes become Unresolved with their original classified causes and dependency path. No-check cases report “No checks,” not vacuous whole-model success. A case summary of passed checks is not a claim that every unrelated input is populated.
|
||||
|
||||
Q1's admitted AST contains only its supported operations. Consequently an unknown function is a source/admission error, not an accepted Q1 node fabricated solely to produce `ValueOutcome::Unsupported`. In the first slice, Unsupported belongs to capability or explicit conversion/evaluation requests outside Q1; the value outcome variant is reserved for a future multi-profile contract that can admit the requested operation. That extension must define when admission versus evaluation reports unsupported capability. Neither path implements the missing mathematics.
|
||||
|
||||
The core evaluator consumes an immutable model plus fully resolved immutable definition environment and explicit case ID. It performs no command, history operation, filesystem/network access or source rewrite. Dependency plans and results are derived data. A client supplies its captured document/server revision stamp; server code takes that stamp from the captured stored envelope, never from an untrusted claim in a request. Results retain the full environment digest and numerical profile. A result can describe only that snapshot. Async desktop results for superseded snapshots must be discarded or visibly marked stale. An accepted source/comment-only revision still gets the current document/service stamp even if numerical values are identical.
|
||||
|
||||
Proposed UI behavior: Evaluate never applies another pending editor. Either evaluate the clearly labeled accepted snapshot or require explicit Apply/Cancel of the analysis draft; select one behavior and test it. API evaluation likewise cannot write model state. Proposed route shape can follow current validation endpoints, returning the captured ETag/revision and structured report; exact route naming belongs to the shared API design.
|
||||
|
||||
## 5. Falsifying worked examples
|
||||
|
||||
| Example | Expected result; what it can falsify |
|
||||
| --- | --- |
|
||||
| Nominal/degraded duration | Nominal `750 ms + 1 s = 7/4 s`, check `<= 2 s` is Satisfied. Degraded uses the **same property IDs**, binds `1250 ms + 1 s = 9/4 s`, and is Violated. Evaluating either cannot change or read the other's bindings. |
|
||||
| Decimal and fractional arithmetic | `0.1 + 0.2 == 0.3` is true; `ratio(1,3) + ratio(1,6) = ratio(1,2)`. Normalized results and exact wire strings are independently predicted, without consulting the evaluator. |
|
||||
| Literal serialization closure | An admitted exact literal `10^300`, maximum permitted 4,096-bit numerator, and `ratio(1, 2^4095)` with the denominator expanded as its integer digits all survive canonical source and JSON round-trips with the same literal AST. Reject an actual 4,097-bit component. A long terminating decimal must use the bounded ratio spelling when needed. |
|
||||
| Existing large integer | Importing an i64 maximum as an explicitly exact analysis literal preserves 9223372036854775807. Adding one produces the exact rational integer 9223372036854775808, but conversion back into DataValue::Integer must reject. Existing i64 admission must not be changed. |
|
||||
| Unit mismatch | `1000 ms == 1 s` is true. `1 s + 1 kg` rejects type checking. A free legacy unit string `"s"` creates no typed unit identity or conversion. |
|
||||
| Equal dimension, different kind | Comparing a Torque value with Energy rejects even though dimensions agree. `AsKind(Energy, force * length)` is an explicit dimension-checked assignment; directly `AsKind(Energy, torque)` rejects. |
|
||||
| Affine temperature | With explicit point/difference kinds and rational units: 20 Celsius-point converts to 293.15 Kelvin-point; 30 Celsius-point minus 20 Celsius-point gives 10 Kelvin-interval; adding that interval to 20 Celsius-point gives 30 Celsius-point. Adding two temperature points rejects. |
|
||||
| Missing/error/false | A declared duration input bound to `none` makes its dependent budget Unresolved/Missing. A known denominator zero gives Unresolved/Failed(DivisionByZero). A computed 9/4 s against 2 s is Violated. None may be displayed as a successful structural validation or the others' outcome. |
|
||||
| Everyday nonrational math | `30 deg → rad` and `sin(30 deg)` are Unsupported under Q1, not an “exact” decimal π conversion. A later approximate profile must independently demonstrate results near π/6 and 1/2 with its promised numerical guarantees. This is an open release gate. |
|
||||
| Identity and purity | Rename a calculation parameter and its unit alias: stable parameter/definition identity and results remain. A calculation definition containing a project Property reference rejects. A recursive call rejects, including inside an unused branch. |
|
||||
| Conditional evaluation | A well-typed `true || missing_boolean` is Satisfied without consulting the right operand; `missing_boolean || true` is Unresolved. An invalid unit/type expression on either side still rejects static validation. |
|
||||
| Library revisions | Two cosmetic import aliases resolving to the same digest/member/dependency closure yield the same definition identity. A changed pinned revision is not automatically the same quantity type because a member name/UUID survived. Rebinding is explicit and invalidates results. |
|
||||
| Cosmetic package update | Under digest-based kind identity, changing only a package comment still makes its unchanged Duration definition a different kind. Adding old/new Duration values rejects and AsKind cannot bridge them. If the intended selective-update workflow requires these values to mix, the conservative identity rule fails that workflow and an explicit compatibility design is required. |
|
||||
| No automatic pruning | Deleting a referenced engineering property or definition without removing/rebinding dependent formulas rejects the whole batch. No term is silently deleted from a sum or constraint. An explicit complete replacement batch may succeed even if its intermediate command sequence is temporarily incomplete. |
|
||||
|
||||
## 6. Integration and the library boundary
|
||||
|
||||
The sibling library proposal uses `Local(Id)` or import/package/member references. An ImportId's pinned complete dependency closure is immutable: upgrade creates a new import and explicit selected-use rebindings. A resolved definition key includes exact package digest, member identity and dependency closure; alias spelling does not participate. Stable logical origin `(PackageId, MemberId)` remains useful for correspondence, but is not sufficient for type/evaluation equality across revisions. Definitions referenced by Q1 never fetch or resolve “latest.”
|
||||
|
||||
Exact evaluation provenance and quantity type compatibility need not ultimately be the same equivalence relation. Treating the full package digest as kind identity is conservative but makes even comment-only repackaging incompatible. Before library release, compare (1) explicit versioned compatibility declarations with checked conversion bridges, (2) a specified semantic definition fingerprint including its semantic dependency closure, and (3) retaining strict identity and requiring all interacting uses to be rebound together. Option 1 needs a trust and validation contract; option 2 needs a normative canonical semantic form and deliberate treatment of labels/metadata; option 3 can defeat selective updates. No alternative is ratified here. Results must retain the exact package/environment digest whichever compatibility policy is selected, and same names or dimensions alone remain insufficient. The bounded Q1 slice has no cross-revision bridge.
|
||||
|
||||
The evaluator's minimum interface is a typed resolver returning a validated QuantityKind, Unit or Calculation plus its resolved identity/environment evidence. Root-owned library code chooses package transport/catalog envelopes. Neutral definitions may reference each other through that resolver. Current layer-owned DataType/Interface library mounts, if selected by the sibling design, remain an explicit compatibility adapter; analysis must not assume that `TypeRef::Named(Id)` is already neutral or that mounted architecture instances are pure definitions.
|
||||
|
||||
| Existing boundary | Required integration behavior |
|
||||
| --- | --- |
|
||||
| Model identity | New analysis Elements enter the current global IDs/aliases. Local neutral definitions need identity/name/alias services and collision rules in their catalog. Parameter IDs stay scoped to their definition. Imported definition identity must never be confused with a local Element UUID. |
|
||||
| References and deletion | Add typed Model/Definition/Parameter reference traversal for Expr. Existing UUID visitors may wrap Model references but cannot blindly rewrite all UUID-shaped data. Analysis subject deletion either rebinds/removes the declaration and affected bindings/checks in an explicit batch or refuses with impact. Do not reuse existing list-pruning rules to drop an expression operand. |
|
||||
| Layer and ownership | Property subjects, case bindings and documented constraints stay in the Element's OA/SA layer. Checks belong to a same-layer case. Neutral definitions cannot capture model records, so permitting a DefinitionRef does not weaken ordinary same-layer references. |
|
||||
| OA↔SA transition | Map subject/property/case/check identities and all Expr::Property/documented-constraint references through explicit counterparts. Calculation/unit/kind pins remain the same neutral definitions. Never remap ParameterIds as model IDs or copy a neutral definition into OA/SA. Cases/checks require deliberate new catalog/closure rules and exact forward/reverse tests. |
|
||||
| Source and JSON | Introduce a deliberate next schema/language version with closed records, AST grammar, located diagnostics and schema fixtures. Source token ownership must preserve comments and rewrite stable property/definition/parameter references correctly. Generic raw-string replacement is insufficient. |
|
||||
| History and recovery | Exact Project+SourceBundle snapshots include accepted definitions/import pins and analysis ASTs. Raw invalid expressions remain drafts. Add closed typed analysis facets/binding keys to semantic review rather than arbitrary JSON patches. Historical imported references must retain enough original pin/origin information to be readable after a live import is removed, without validating them as live references. |
|
||||
| Publication and API | Analysis requests operate on captured ETag-qualified snapshots. State-changing analysis/library commands retain current atomic admission and no-op semantics. Schema clients must see real definitions, binding types, numerical representation and classified results; an opaque expression string is not the contract. |
|
||||
| Legacy migration | Preserve source7 Constraint/guard/event/message prose and unit strings exactly. Add no heuristic parsing, unit guessing or default numerical values. Structured quantity use in payload DataValue/TypeRef is a further integration slice; these engineering-property examples alone do not prove typed payload parity. |
|
||||
|
||||
## 7. Exact first slice, remaining decisions and revisit evidence
|
||||
|
||||
The first production slice proposed for root approval is one **Q1 duration budget workflow in both OA and SA**, including exact numbers, local neutral Duration/second/millisecond definitions, two explicit cases sharing typed properties, inline expression, reusable two-parameter calculation, formal check, GUI/source/REST authoring and exact history/recovery. It must not be released as the entire quantity/calculation capability merely because it passes.
|
||||
|
||||
Acceptance must establish all of the following:
|
||||
|
||||
1. Independently construct the complete nominal/degraded models and sources and obtain exactly 7/4 and 9/4 seconds, with different true/false checks and stable shared property identities. Demonstrate reusable call parameter identity independently of names.
|
||||
2. Drive the **same** creation/change through graphical controls, source and real HTTP. Compare full models, accepted source bytes, references and result stamps. Evaluate alone changes no model, revision or Undo/Redo state.
|
||||
3. Reject wrong layer/kind/units, duplicate/missing parameter arguments, missing binding rows, definition capture and cycles atomically. Retain admitted explicit `none` inputs and show Missing distinctly from False and DivisionByZero.
|
||||
4. Exercise exact decimal/fraction/i64-boundary examples and numerical limits, including literal AST/source/JSON closure at 4,096-bit boundaries and the long terminating-decimal counterexample. Check read-only unit conversion versus changing an authored unit literal. No f64 parse/round-trip is permitted in the Q1 evaluator or exact wire adapter.
|
||||
5. Save, Undo, Redo, reopen and recover a raw invalid expression using independently retained complete snapshots. Changing valid UUIDs while preserving names/numbers must fail identity assertions. Pending other editors must not be implicitly applied by Evaluate/navigation.
|
||||
6. Exercise creation/editing at minimum and wide native sizes, with a dense model and duplicate names. Test D against the direct-baseline/explicit-override alternative using the action/context-error criteria above. All property/case/function/parameter/unit choices must be reachable without traversing global homogeneous lists.
|
||||
7. Demonstrate honest Unsupported behavior for degree/radian/trigonometric requests; keep their approximate-domain acceptance and full structured payload/library integration visibly open. Unsupported is a successful refusal test, not evidence that the requested operation is implemented.
|
||||
8. Complete the small source-only workflow from a blank supplied bundle using only the published specification and admission API. Include subject declarations, definitions, both cases, inline and reusable calculations, checks, stable parameter rename, split-file edit, invalid-input repair and save/reopen. Inspect the real stabilized text for identity/boilerplate cost. Run the section 3.4 dense fixture and compare D with B before claiming that the analysis notation supports large-model authoring comfortably.
|
||||
|
||||
| Consequential unresolved choice | Evidence that should decide or reopen it |
|
||||
| --- | --- |
|
||||
| D versus baseline values plus overrides (B) | Native and text-only task comparison including ordinary context-independent properties, creation overhead, repeated assumptions/formulas, stabilized-source noise, propagation surprises and wrong-context edits. Reverse preference if explicit complete case bindings cause more confusion/work than clearly labeled baseline inheritance. |
|
||||
| Q1 alone versus F versus Q+F release scope | Representative engineering formulas must include angular conversion and transcendental cases, not only rational budgets. Q1 cannot win a claim of broad capability by excluding these tasks. Freeze a verified approximate profile before claiming their support. |
|
||||
| Typed subject association versus true semantic ownership | Deletion, navigation and property discoverability tests on both Element and Relation subjects. Avoid changing parent semantics merely to reuse an existing tree renderer. |
|
||||
| Explicit anonymous-dimension AsKind versus registered kind operations | Force/acceleration/energy/torque examples and authoring measurements. A shortcut is acceptable only if the kind algebra is unambiguous and versioned, never inferred from display names. |
|
||||
| Structured quantity types in existing data/payload contracts | Real message/default/type workflows need a deliberate shared QuantityValue and type-reference design. Retaining old annotations is compatibility, not completion of that integration. |
|
||||
| Definition/package compatibility and historical evidence | Library revision/mount design and independent review must prove pin provenance, selective updates and historical readability. Resolve the unchanged-Duration/comment-only-repackaging falsifier explicitly; exact evaluation provenance must survive any reviewed cross-revision compatibility policy. Do not silently accept same-name or same-member-version changes as type equivalence. |
|
||||
|
||||
The root should record the selected alternatives, rejected options, open approximation/payload/library work and resulting release criteria in the durable ledgers. The next highest-information step is independent criticism of these examples and the simple-property authoring flow, followed by one agreed vertical implementation. No statement in this report closes the user's broader goal.
|
||||
@@ -0,0 +1,292 @@
|
||||
# Reusable libraries: candidate semantics and falsifiers
|
||||
|
||||
Codex-956atf `/root/libraries_design`, 2026-09-10. This is a bounded foundational proposal for root synthesis and independent criticism. **No candidate in this report is a ratified decision or implemented capability.** Sole owned file: this report. No production edits, Cargo invocation, native application operation, or new passing test result. Initial source checkpoint was `8547b85`; later root changes through `aa40345` do not change the inspected library/reference architecture.
|
||||
|
||||
Read the complete updated `PROJECT_GOAL.md`, the requirements delta, Gitea issue #1 through comment #92, the open PR list (empty), and shared Wiki Home. Ownership is recorded in comments #86 and #93. Coordinated definition interfaces with the separate analysis/quantity designer. Codex-9e8r6t's independent criticism in #90 is incorporated below; that host's scenario/layout/creation/platform work is outside this task. Wiki Home contains older checkpoint evidence, not current release acceptance.
|
||||
|
||||
## Proposed outcome and decision boundary
|
||||
|
||||
An engineer can publish a reusable library from ordinary modeled content, use its definitions in multiple projects, instantiate an OA/SA pattern more than once with explicit contextual bindings, and selectively update an instance without losing local work. The saved project carries the exact required library content and reopens offline. GUI, textual source and REST expose the same imports, bindings, instance identities and update choices.
|
||||
|
||||
The leading candidate is **immutable content-pinned definition imports plus editable, materialized pattern instances with explicit origin maps and three-way update**. It fits the current architecture better than making every architectural object a virtual instance of an external definition. It also provides maintained reuse that source copying alone cannot provide.
|
||||
|
||||
The most consequential remaining choice is how existing layer-owned data/interface definitions participate. This report prefers an explicit immutable local mount adapter for those existing records, while new layer-neutral quantity/calculation definitions use a qualified `DefRef`. That is a compatibility boundary requiring criticism and tests, not permission to create two inconsistent library systems. If the adapter cannot satisfy the common identity, source and update rules below, it loses to the more invasive uniform definition-reference alternative.
|
||||
|
||||
Local package publication and explicit server upload are sufficient to prove maintained cross-project reuse. A registry, automatic discovery, remote writeback from an instance, arbitrary executable plugins and full SysML/KerML instantiation are separate capabilities; none is assumed to exist under this proposal. This is a proposed bounded implementation strategy for the user's requirement, not a reduction of the acceptance obligations.
|
||||
|
||||
## Evidence that constrains the design
|
||||
|
||||
| Verified repository fact | Consequence |
|
||||
| --- | --- |
|
||||
| `model.rs:13` has only `Layer::Oa` and `Layer::Sa`; `Project` at `:1621` has local element/relation/diagram/artifact/trace maps. `identities()` at `:1727` builds one UUID/alias namespace. | A package cannot be another Project merged into the maps without an explicit identity translation and ownership policy. A third neutral layer must not be invented just to store units. |
|
||||
| `SharedBody` at `model.rs:593` includes DataType, DataField, ExchangeItem and Interface; `TypeRef::Named(Id)` at `:347` and ordinary semantic references use local UUIDs. `validation.rs:126` expects an existing compatible element in the owner's layer. | Neutral library references are not currently accepted by these paths. Making data definitions neutral requires a deliberate metamodel/refactoring decision. |
|
||||
| `parent_permits` at `validation.rs:92` distinguishes semantic containment. Processes/scenarios are layer roots; occurrences, lifelines, ports, data fields and state regions have specific owner kinds. SA admits at most one System of Interest (`language.rst:31`). | Instantiation cannot place every selected object under an arbitrary container or clone another System of Interest. Binding and graphical placement are different operations. |
|
||||
| `OccurrenceBody` contains ordered branches, sequence references, ScenarioUse lifeline bindings, reply identities, operation allocations and message-field paths (`model.rs:550`). `ContextualLink` endpoints have occurrence-reference paths. | A pattern is a graph of typed records and references, not a collection of named boxes. Repeated uses, paths and order must retain their distinctions. |
|
||||
| `references.rs:5,11` enumerates typed live element/relation references; `:206` also remaps views, placements, artifacts, traces and explicitly typed semantic-history references. Deletion at `:270` can cascade into other records. | Reuse these authoritative classifications where applicable, but do not run one UUID replacement over package metadata, text or historical origins. A library update must preview cross-instance deletion impact. |
|
||||
| `semantic/historical.rs:305` deliberately distinguishes historical UUID remapping from deletion; historical facts need not refer to currently live objects. OA/SA review has its own baseline and transition semantics. | A package source member, an old local snapshot identity and a live local reference are different categories. OA/SA counterpart review is not a library merge engine. |
|
||||
| `SourceBundle` is an explicit UTF-8 file map (`source_project.rs:17`). The compiler reads no filesystem/network. Includes share the project's global namespace (`language.rst:1692`). | Imports need separate syntax and explicit supplied content. Neither relative include paths nor an ambient cache establish library identity. |
|
||||
| `prepare_command` at `session.rs:170` validates a private candidate and returns exact identity correspondence. `update_bundle_with_identity_map` at `source_project.rs:780` checks the old index, preserves authored bytes and recompiles. Server admission at `store.rs:144` uses that boundary. | Library operations must extend this preparation/admission path. An adapter may not accept a model before package resolution and the corresponding source update both succeed. |
|
||||
| `Session` stores Project history; desktop/source and server add document-level responsibilities. `Command::Replace` and nested Batch are available (`session.rs:375`). | Read-only widgets are insufficient for immutability. Replace, source Apply, REST writes, nested batches, deletion, identity changes, migration and recovery all need the same semantic guards. |
|
||||
|
||||
Capella's official feature page describes reusable collections/replicas packaged in libraries and shared between projects. Its official comparison explains why architectural functions/components are usually treated as distinct usages and why replication/synchronization supports that workflow. These observations support both shared definitions and distinguishable editable architectural occurrences. They do not specify the content-addressing, offline, merge or API rules proposed here. [Capella features](https://mbse-capella.org/features.html), [Capella instance and definition rationale](https://mbse-capella.org/arcadia_capella_sysml_tool.html)
|
||||
|
||||
## Materially different candidates
|
||||
|
||||
Criteria come from the requested engineering workflow: maintained reuse, separate instances, exact offline reproducibility, complete source/API parity, understandable local editing, and a tractable extension of current semantics. Scores below are qualitative design judgments, not measured performance.
|
||||
|
||||
| Candidate | Maintained reuse / local editing | Identity and offline behavior | Existing-core impact | Main falsifier |
|
||||
| --- | --- | --- | --- | --- |
|
||||
| A. Copy source or model fragments; record a URL in an artifact link | Local editing is simple; comparison/update is manual and correspondence is not authoritative. | Fresh IDs can be generated, but provenance, exact dependency versions and subsequent merge are unspecified. | Small. | Cannot reliably update two differently edited instances of the same pattern. Fails as the final library implementation. |
|
||||
| B. Compose immutable external model namespaces; all uses remain qualified references | Excellent shared definitions; architectural local edits require a separate override or specialization model. | Qualified identities and pinned packages can be exact. | Every local lookup, containment/reference validator, query, diagram, transition and command must understand an external model environment. | A supposedly simple rename or deletion of one architecture occurrence modifies the shared definition or requires an unexplained override language. |
|
||||
| C. Virtual template instances plus an override log; expand effective models on demand | Strong separation of template and instance; updates can replay or rebase overrides. | Instance identity must remain stable as template shape changes; overridden lists/deletions need their own algebra. | Adds an effective-model layer below nearly all current commands, validation, projection, source and API queries. | Current explicit source records cease to be the editable authoritative model, or effective expansion yields different IDs after reopen. |
|
||||
| D. Pinned shared definitions plus materialized editable patterns and explicit three-way update | Ordinary local modeling remains available; origin maps make later comparison possible. | Exact package closure and local maps survive reopen/history; updates are explicit. | New package/document subsystem, reference adapter and merge planner; ordinary architectural records remain local. | Immutability or provenance can be bypassed through Replace/source/REST, or local edits are silently lost during update. Leading candidate if these are disproved. |
|
||||
|
||||
D wins over A because it maintains correspondence and update semantics. It wins over B/C for the first release because the existing ordinary local graph remains the engineering workspace, while shared definitions still have their proper distinct role. B is the stronger fallback if uniform qualified references prove simpler than maintaining the proposed legacy-definition mount boundary. C is not selected merely because template expansion is convenient for implementation; its override language would itself need a substantial specification and user workflow.
|
||||
|
||||
## Common package, identity and resolution contract
|
||||
|
||||
The following rules apply to every export category and both representations of imported definitions.
|
||||
|
||||
1. **Logical identity:** a library author allocates one `PackageId` UUID and preserves it across revisions. Each exported item, prototype record, neutral definition and external role has a persistent UUID. Renaming does not change identity. The publisher must create a new identity when a record changes semantic record class. Names and source aliases never establish correspondence.
|
||||
2. **Revision identity:** a `PackagePin` contains `package_id`, an exact nonempty version label, a package-format version and a SHA-256 digest. The label is human-facing and is not an implicit compatibility range. No ordering or automatic upgrade follows from a label. A changed digest is a different immutable revision even if all names are unchanged. Two contents claiming the same package ID/version with different digests produce a conflict when compared or brought into the same import graph; there is no last-writer-wins choice.
|
||||
3. **Sealing:** a package contains a manifest and one prototype `SourceBundle`. The prototype is an ordinary admitted Project in its own private namespace, including any local neutral definition catalog introduced by the analysis design. The manifest identifies the source entry, exports, member selection, roles and exact dependencies. All package record IDs must already be explicit. Importing sealed content must never insert missing IDs or migrate/reformat bytes silently; an older package requiring migration is republished as a new revision.
|
||||
4. **Digest preimage:** define a portable framed byte stream rather than hashing ZIP metadata. Proposal: ASCII `ARCADIA-LIBRARY-1` followed by a NUL; then the manifest UTF-8 byte length as unsigned 64-bit big-endian and its exact bytes; then the entry-path length/bytes; then the file count; then each canonical logical path and source text, each separately length-prefixed, in ascending UTF-8 path-byte order. Counts/lengths are unsigned 64-bit big-endian. The manifest has no self-digest field; it includes dependency pins. Hash exact source bytes, including comments and line endings. The lowercase 64-hex-character digest identifies those bytes. This rule is a Studio proposal, not a claim of conformance to another package format.
|
||||
5. **Dependencies:** every package dependency names another exact pin, never a URL to resolve during compilation. The complete transitive graph must be supplied and acyclic. Prototype imports must agree with the manifest's declared dependencies; hidden prototype dependencies are errors. Within one root import closure, each PackageId resolves to exactly one pin. A diamond with two different revisions of the same PackageId is an explicit conflict, even if the author expects them to be compatible. An identical repeated dependency is deduplicated by digest. Report the two requiring paths.
|
||||
6. **Concurrent versions:** two separate named imports in one project may have distinct closures and pin different versions of the same package. This permits one instance to advance while another remains pinned. Aliases qualify lookup; they do not make the definitions equal. Identical digest/member/dependency identity reached through two aliases denotes the same imported definition; changed digest is not automatic type equivalence. This matches the analysis designer's proposed exact type identity.
|
||||
7. **Import immutability:** once referenced, an ImportId's root pin and closure cannot change. Updating creates a new import and explicitly rebinds selected uses/instances. Renaming the import alias changes source spelling only. Removing an import is refused while a live definition use, mount or managed instance still requires it. Old package bytes remain available to history and recovery even when the current document no longer uses them.
|
||||
8. **Resolution:** a pure `VerifiedPackageStore` is derived from explicitly supplied package bytes by digest checking, manifest parsing, bounded graph resolution and prototype validation. No deserialized boolean such as `verified: true` is trusted. Missing content, unknown export/member, forbidden private member, duplicate manifest key/UUID, dependency cycle, wrong digest, unsupported package format and source/admission limit failures return located diagnostics and no candidate. They never substitute a cached different version or an empty definition.
|
||||
9. **Budgets:** apply total document/package limits to the deduplicated closure, not fresh limits per package. Initial benchmark candidates are 64 packages, graph depth 16, 256 dependency edges, and 64 MiB combined project/package source, in addition to existing record/parse budgets. These numeric choices require realistic-library measurements before becoming normative; finite configurable refusal is mandatory. A rejected import retains the raw draft and accepted document unchanged.
|
||||
|
||||
Digest verification establishes exact content identity; publisher identity or compatibility promises are separate metadata. Registry access, if later added, only supplies bytes to this same admission boundary.
|
||||
|
||||
## Export categories and the definition-reference tradeoff
|
||||
|
||||
The proposed manifest has three explicit export categories. An engineer sees their purpose, not Rust variant names.
|
||||
|
||||
| Export category | Consumer semantics | Layer policy |
|
||||
| --- | --- | --- |
|
||||
| `Definition` | An immutable reusable quantity kind, unit, calculation or other neutral catalog definition. `DefRef::Imported { import, package, member }` resolves through the supplied closure. Only stable formal parameter IDs and other definitions may be captured; no particular project's property/case/participant identity. | Neutral. Applicability of an analysis property/case remains OA/SA-owned and is checked by the analysis model. |
|
||||
| `LayeredDefinition` | An immutable data/interface contract graph mounted once into a consuming project, with an explicit source-member-to-local-ID map. Many local uses point to that one mounted graph. Initial allowed records: DataType, DataField, ExchangeItem, Interface and their data-association/interface-item-allocation closure. | Exactly the layer declared in the prototype export. Mounting does not translate OA to SA or relax same-layer references. A package may publish separate OA/SA exports. |
|
||||
| `Pattern` | A set of ordinary OA/SA semantic records materialized with fresh local identities and explicit external bindings. The resulting architectural records are editable, with instance provenance maintained separately. | Original layer of each member is preserved. An export may deliberately span OA/SA and carry explicit mapped traces. An independent layer-transition command remains a different operation. |
|
||||
|
||||
The layered-definition adapter preserves current `TypeRef::Named(Id)` and same-layer validators. Mounted records are semantically read-only; they are not editable pattern instances. Their payload must exactly equal the admitted export transformed only by the stored identity/alias map. The mount's revision and member identity/alias map are immutable once created; editing that map in source is not a bypass for renaming/reidentifying an imported payload. The outer import alias remains local spelling. A user can fork/detach definitions explicitly. A new package revision creates a new mount with new local IDs; selected referencing uses are rebound in one reviewed transaction. The old mount can coexist for unchanged uses. A layered definition has no project-specific roles: its complete data/interface dependency graph is included or resolved through other explicitly mounted exact definition exports.
|
||||
|
||||
This avoids silently neutralizing current data semantics or converting all architectural references into external references. Its cost is real: local mounted IDs and qualified neutral definition references have different storage shapes. The common resolver must expose one origin descriptor `(pin, export, member)`, one import lifecycle and one read-only/error policy to UI/API clients. The origin descriptor must be discoverable from a mounted local ID and from a `DefRef`. An API must never report the mounted record as ordinary editable content merely because its model field is a UUID.
|
||||
|
||||
The competing uniform alternative introduces qualified references for all reusable data/interface/member positions and a neutral definition catalog for those records. It removes materialized mounts, but touches DataField ownership, inherited field lookup, port/interface contracts, operation allocation identities, message field paths, diagrams, transitions and semantic-history source forms. It should win if a focused prototype shows fewer special cases or if the intended engineering workflow requires one exact data identity to span OA and SA. That requirement is not inferred by redefining the existing same-layer rule. Root should resolve this adapter choice before implementing the catalog/reference migration.
|
||||
|
||||
## Pattern publication, closure and binding
|
||||
|
||||
Use an admitted prototype Project as the authoring context, rather than allowing arbitrary ill-typed placeholder JSON. An export selects prototype members and declares the prototype identities at its boundary as named roles. Those prototype role records demonstrate a valid context, but are not cloned into consumers.
|
||||
|
||||
An export's closure is explicitly reviewable and then sealed:
|
||||
|
||||
- Start from selected semantic roots. Include all semantically owned descendants required by those roots: ordered occurrences/branches, lifelines, ports, fields, machine regions/states and newly modeled analysis records where their declared subject is included.
|
||||
- Include internally owned relation records, not only relations whose endpoint names happen to match. This includes sequence/contextual links, state transitions/actions, interface-item allocations and other relations needed for the selected behavior/contracts. An omitted essential relation is an export error; an intentionally partial external relation requires a declared boundary role.
|
||||
- Classify every typed reference as another exported member, an imported definition with an exact pin, or a declared external role. No dangling package-private UUID may escape. Forward references are valid; unresolved references are not converted to `None` to make the export succeed. Existing deliberately incomplete optional fields may remain incomplete and retain their engineering warnings.
|
||||
- Give each role a stable ID, label, required reference category, allowed kinds/layer, and context predicates inferred from all its use sites. Parent roles must satisfy `parent_permits`. Scenario roles must respect viewpoint/represented-source rules; operation/port bindings must satisfy their existing ownership contracts. The final materialized candidate still passes complete core validation, which is stronger than matching a kind label.
|
||||
- A required role has exactly one explicit binding; an optional role can be explicitly absent only where every use site permits absence. Two roles may bind the same host identity only when their contracts and all resulting relations remain valid. This is shown in preview. There is no bind-by-name fallback.
|
||||
- A package System of Interest is a context role, never a cloned member. An SA pattern may require binding to the host's System or leave that separately optional if its contents permit. The operation never creates a second System, translates it into another kind, or silently creates one to satisfy a binding.
|
||||
- A prototype Project ID is not an architectural member. Layer roots stay roots unless their kind permits a chosen semantic parent. Importing into a diagram adds placements only through an explicit presentation choice; the diagram is not their semantic owner.
|
||||
|
||||
The package author can publish a whole coherent two-layer pattern; the manifest must state which cross-layer trace links are included. New instances may copy those links when both endpoints are resolved. **They do not copy prior semantic-review acknowledgments as though the consumer reviewed the instance.** The initial policy clears copied trace baselines and reports that review is pending. Ordinary accepted local baselines on an existing instance are not automatically refreshed during a library update. Explicitly supplied artifact links preserve URI/revision/fragment literals; UUID-shaped strings are never remapped. A relative artifact target must have an explicit package or consumer base policy before it can be exported portably; no silent rebasing against the user's current directory.
|
||||
|
||||
Presentation export is an explicit independent option: include a named diagram with its placements/routes/options only when every referenced semantic identity can be mapped or bound. Allocate fresh diagram and placement UUIDs, remap actual typed references, and preserve geometry. Semantic-only instantiation creates no arbitrary default arrangement; the initiating graphical workflow may supply reviewed placement commands. Updating semantic content does not overwrite local layout unless the user selects a separate presentation change set.
|
||||
|
||||
## Proposed persistent model and document shapes
|
||||
|
||||
These are type-level sketches, not production Rust or finalized source grammar. Identity wrapper types should prevent passing a foreign member UUID to a local-ID remapper.
|
||||
|
||||
```text
|
||||
PackagePin { package_id: PackageId, version: String, format: u32, digest: Digest }
|
||||
PackageArchive { manifest_source: String, prototype_source: SourceBundle }
|
||||
LibraryImport { id: ImportId, alias: Alias, root: PackagePin }
|
||||
DefRef = Local(DefinitionId)
|
||||
| Imported { import: ImportId, package: PackageId, member: MemberId }
|
||||
|
||||
DefinitionMount {
|
||||
id: MountId, alias: Alias, import: ImportId, export: ExportId,
|
||||
member_map: Map<MemberId, LocalId>, aliases: Map<MemberId, Alias>
|
||||
}
|
||||
|
||||
LibraryInstance {
|
||||
id: InstanceId, alias: Alias, name: String,
|
||||
base: { import: ImportId, export: ExportId, bindings: RoleBindings,
|
||||
materialization_policy: Policy, original_local_map: MemberMap,
|
||||
snapshot: TypedInstanceGraph },
|
||||
correspondence: Map<MemberId, Live(LocalId) | Deleted(ReservedLocalId)>,
|
||||
identity_lineage: ExplicitLocalIdentityCorrespondence,
|
||||
proposed_binding_defaults: RoleBindings,
|
||||
detached_origins: List<OriginRecord>
|
||||
}
|
||||
|
||||
Project additions: imports, definition_mounts, library_instances,
|
||||
local neutral definitions (owned by the analysis design)
|
||||
|
||||
PortableDocument {
|
||||
model: Project,
|
||||
source: SourceBundle,
|
||||
packages: Map<Digest, PackageArchive>
|
||||
}
|
||||
```
|
||||
|
||||
The package archive map is authoritative input to pure admission, not an ambient resolver cache. Its parsed model/index can be derived and shared immutably in memory. An implementation may deduplicate immutable bytes between snapshots, but it must not omit them from portable export/recovery or drop a pin required by Undo.
|
||||
|
||||
`Project` includes import/mount/instance intent and local editable records. The document compiler derives/verifies mounted payload against exact package content, checks every origin map and definition reference, and rejects forged mismatches. Public JSON that contains mounted records is checked against the same materialization. No special trust attaches to an API caller's supplied project or plan. A core model-only convenience API can use an empty store for projects without imports; it must return `missing_library_content` for imported content unless the required store is explicitly supplied.
|
||||
|
||||
The baseline records the actual last adopted package, bindings and materialized typed graph, not a regenerated guess from current local data. Its snapshot includes the exact chosen local aliases/names, identity map, copied presentation policy and constructor payloads. Regenerating aliases with `fresh_alias` against today's project would create a false baseline after unrelated names are added; that is prohibited. Baseline references can be historical and absent, so validate their closed shape, mapping and derivation separately from current live-reference admission. Deleted tracked members retain a reserved local identity so a later import cannot silently reuse that UUID for a different object. The active correspondence is injective, record-class-preserving and disjoint between instances and mounts. Separate instances always allocate separate local members, even with identical bindings and names. Shared immutable definitions can deliberately be common to both.
|
||||
|
||||
Explicit local `Reidentify` must update current correspondence and a typed lineage map used during comparison; it does not rewrite the sealed package or the immutable original snapshot. Deletion marks a mapped member absent instead of forgetting its origin. A subsequent new record with a similar name is a local addition, not the deleted member's replacement. A retained upstream-deleted member can be explicitly detached; a later upstream reintroduction cannot silently adopt that local extension.
|
||||
|
||||
## Textual source and portable admission
|
||||
|
||||
Text must represent the complete library intent. Merely attaching packages to a desktop save dialog would break parity with source Apply and REST.
|
||||
|
||||
Proposed source forms illustrate the required information; keyword spelling/version numbers remain subject to grammar review:
|
||||
|
||||
```text
|
||||
library_import controls_v1 id "<import-uuid>" {
|
||||
package "<package-uuid>";
|
||||
version "1.0.0";
|
||||
digest "<sha256>";
|
||||
}
|
||||
|
||||
definition_mount oa_telemetry id "<mount-uuid>" {
|
||||
import @controls_v1;
|
||||
export "<oa-data-export-uuid>";
|
||||
members { "<source-type-uuid>" -> "<local-type-uuid>" alias telemetry; }
|
||||
}
|
||||
|
||||
library_instance left_monitor id "<instance-uuid>" {
|
||||
import @controls_v1;
|
||||
export "<pattern-export-uuid>";
|
||||
bindings { "<operator-role-uuid>" -> @operator_left; }
|
||||
members { "<source-activity-uuid>" -> @monitor_left; }
|
||||
// Exact baseline/correspondence records are typed source values.
|
||||
}
|
||||
```
|
||||
|
||||
For neutral definition use, a readable qualified alias can resolve to the exact imported member (`controls_v1::duration`); canonical output must retain the stable import/member identity, and alias changes must use the source index rather than text replacement. Existing local alias spelling remains globally unique for local records. Member aliases are scoped inside their package; two packages may both export `duration`. Missing/ambiguous export lookup is an error, never a first-result match. Avoid widening current reserved words until the actual grammar is selected.
|
||||
|
||||
The pure source compiler accepts **an explicit portable source envelope consisting of the ordinary SourceBundle plus package archives**, resolves imports from that envelope, and returns the entire admitted document. Existing include semantics remain unchanged. Package archives are nested typed source bundles in JSON/REST. A directory export places them at digest-addressed paths and an explicit manifest maps pins to those logical entries; file loading builds the same envelope before calling the compiler. The directory loader may read only those declared bounded paths, just as current includes are explicit. It must never search another open project's cache for a convenient revision.
|
||||
|
||||
Canonical source export must offer a self-contained envelope/directory containing every required package, with the invariant `compile_source_document(format_source_document(document)) == document.model` plus exact package bytes. A single source string that contains imports but lacks the explicit package envelope returns missing-content diagnostics. Existing no-library string APIs continue working. A plain model JSON export that needs imports must likewise use the published portable document representation; it must not masquerade as independently reopenable when its required bytes are absent.
|
||||
|
||||
`SourceIndex` needs locations for imports, mounts, instance mappings, bindings, definition references and lineage fields, with typed classification of local versus foreign IDs. Derived mounted payload does not receive a second ordinary editable declaration: canonical formatting emits its mount directive/map and the supplied package envelope, and compilation reconstructs/verifies it. The source updater must classify derived mounted records explicitly rather than treating a missing ordinary declaration as a reason to append one. Graphical operations update only affected local tokens and metadata; package bytes are immutable. Editable pattern instances, their diagrams and their source declarations remain ordinary authored records. Exact source/history tests must include comments, duplicate display names, non-ASCII text, mixed file ownership and CRLF content.
|
||||
|
||||
## Command boundary, visitor audit and immutability
|
||||
|
||||
The shared core should expose pure prepare operations, with no Iced or HTTP-specific library rules:
|
||||
|
||||
```text
|
||||
inspect_package(archive, supplied_closure, limits) -> PackageInspection
|
||||
prepare_import(document, archive_closure, import_identity) -> PreparedDocument
|
||||
prepare_mount(document, import, export, reserved_map) -> PreparedDocument
|
||||
prepare_instantiate(document, import, export, bindings, presentation, reserved_map)
|
||||
-> PreparedDocument
|
||||
preview_instance_update(document, request) -> LibraryUpdatePlan
|
||||
prepare_instance_update(document, request, choices, expected_plan_fingerprint)
|
||||
-> PreparedDocument
|
||||
prepare_detach_instance / prepare_fork_definition / prepare_remove_import
|
||||
```
|
||||
|
||||
Preparation resolves exact bytes, reserves IDs once, validates package/mapping/role rules, builds an ordinary candidate command batch, checks complete model semantics, updates the source envelope, recompiles, and compares the resulting full model and pinned content before adoption. The returned selected identity is optional metadata, not proof of acceptance. A preview exposes its base revision/source/closure fingerprint and reserved IDs. Commit recomputes/checks the request and choices against the current document; it never trusts arbitrary serialized commands supplied in a plan. Stale revision, changed source, changed package bytes, lost binding target, unresolved conflict or source-budget failure rejects the whole operation.
|
||||
|
||||
Mandatory reference categories and their behavior:
|
||||
|
||||
| Category | Example | Rename/reidentify/delete behavior |
|
||||
| --- | --- | --- |
|
||||
| Live local semantic reference | Parent, endpoint, field path, scenario binding, analysis property subject, local DefRef | Existing typed local visitors apply; same-layer/kind rules remain. Include new analysis and library use sites in impact queries. |
|
||||
| Live local library bookkeeping | Instance current correspondence, current binding defaults, imported/mounted object handles | Update through explicit typed library visitors. Reidentify composes actual identity correspondence. Deletion records tombstones or refuses removal of required managed objects as specified. |
|
||||
| Qualified definition reference | ImportId plus PackageId/MemberId | Import alias changes source spelling only. Explicit reference rebinding changes revision. A local element reidentify never changes PackageId or MemberId. |
|
||||
| Foreign origin | PackageId, export/member/role IDs, dependency IDs and sealed prototype references | Never visited as local identity. Never renamed/deleted because an equal UUID bit pattern happens to occur locally. |
|
||||
| Historical baseline/original-map reference | Last-adopted role bindings and original local map | Retain exact stored observations. Use explicit identity-lineage data during comparison rather than rewriting sealed or historical origins. Absence from the current model is allowed. Never include these in deletion cascades. |
|
||||
| Existing OA/SA semantic-history reference | Typed SemanticBaseline fields | Preserve the current explicit-remap policy in `semantic/historical.rs`; do not broaden it to package history. No generic scan of UUID-shaped strings. |
|
||||
| Literal content | Artifact URI/revision/fragment, descriptions, expression text, comments | Preserve bytes except an explicitly edited literal. A UUID-looking substring is not a reference. |
|
||||
|
||||
Audit every affected boundary: `Project.identities/contains/fresh_alias/layer_of/named`, typed reference enumeration/remapping, reserved/tombstone identity checks, deletion impact and finish-deletions, inheritance pruning, kind/reference admission, source normalization/index/update, JSON decoding, migration, semantic baselines and transition preparation, projection/view options, server query/edit endpoints, recovery and both forms of history. An allowlist of editable imported fields in a form is not this audit.
|
||||
|
||||
Mounted records reject ordinary Edit/Rename/Reparent/SetAlias/Reidentify/Delete and any transitive command that would mutate their verified payload. If a local deletion would cascade into a mount, the whole operation requires a reviewed rebind/detach/removal instead. Replace and source Apply may propose another **valid immutable revision/import/mount**, but cannot alter bytes while retaining an old pin or forge a mounted payload that does not match the export. The first implementation should centralize this as before/after document admission, so nested Batch and all adapters are covered.
|
||||
|
||||
## Three-way update: exact observable rules
|
||||
|
||||
For a managed instance, define `B` as its exact stored last-adopted materialized snapshot, validated against the pinned export and stored policy/bindings; `L` is the current local graph and `N` is the proposed new export with explicit proposed bindings and reserved identity/alias map. Match members by stable package member identity, then use the stored correspondence/explicit local identity lineage to compare their local roles. Do not match by name, diagram position or graph similarity, or reconstruct `B` using current local names/values.
|
||||
|
||||
Fresh members in `N` reserve new local IDs once. Surviving members keep their current local IDs. A kind/class change under the same source member ID is a conflict, not an identity-preserving edit. A package update may not silently convert an Activity into a Function, an element into a relation, or a definition into an occurrence.
|
||||
|
||||
For a typed facet with values `b`, `l`, `n`:
|
||||
|
||||
- If `l == b`, the upstream change to `n` is an eligible update.
|
||||
- If `n == b`, retain the local change `l`.
|
||||
- If `l == n`, the edits have converged.
|
||||
- Otherwise, require an explicit local/upstream/valid authored resolution.
|
||||
|
||||
Equality is typed and includes exact reference identities. Constructor changes and their dependent fields are one coupled decision. In the first coherent slice, ordered member arrays are compared as complete ordered values; simultaneous local reorder and upstream insertion is a conflict requiring an explicit final order. This conservative rule is preferable to silently inventing an insertion anchor. Truly set-valued collections can compare by identity membership where the existing specification says order is irrelevant.
|
||||
|
||||
Deletion is not a special case that bypasses review:
|
||||
|
||||
| Situation | Required outcome |
|
||||
| --- | --- |
|
||||
| Upstream deletes a member; local member is unchanged | Eligible deletion only after all external references and current deletion cascades are shown. Any affected object outside the instance requires explicit resolution. |
|
||||
| Upstream deletes a locally edited or locally referenced member | Conflict: keep as detached local content, or explicitly delete/rebind the full reviewed impact. No hidden cascade. |
|
||||
| Local member was deleted; upstream changes it | Conflict: preserve local deletion or recreate from upstream using its reserved identity if still admissible. Never resurrect it just because its name appears in the new package. |
|
||||
| Upstream and local both delete | Converged absence; provenance remains sufficient for the next update. |
|
||||
| Local addition is absent from both package revisions | Preserve it as local extension. Its relations/containment can still make another proposed change invalid. |
|
||||
| Upstream changes or removes a role | Review the role/binding facet and all affected use sites. Wrong-layer or missing targets are errors. No fallback to a different same-named participant. |
|
||||
|
||||
An ordinary local field edit changes the actual model; it does not retroactively change the package baseline. An explicit rebind action records intended role defaults and changes the selected current use sites, with a preview of any divergent local field. Future additions use the proposed bindings shown in update preview. The tool must not imply that every ordinary reference remains a live parameter substitution after materialization.
|
||||
|
||||
The plan covers all choices and the complete candidate, including effects outside the instance, before Apply becomes available. Apply is one document/history transaction. On success the base advances to the exact new package/materialization, even when selected local overrides or deletions remain; they remain differences from that new base. A rejected or cancelled preview leaves the old base unchanged. Evaluating a preview and inspecting changes create no history step.
|
||||
|
||||
Semantic and presentation updates have separate choices. Existing OA/SA traces stay ordinary local artifacts: neither updating a package nor changing a binding implies the engineer has reviewed OA/SA consistency. The current semantic reviewer can report resulting changes, but its acknowledgment state is not a substitute for the library baseline.
|
||||
|
||||
## Detach, fork and removal
|
||||
|
||||
`Detach instance` retains the current local semantic records, IDs, relationships, source spelling and local layout. It removes active update management and reservations for absent members, records a non-live origin note with package digest/export/mapping, and clearly states that future package updates will not be offered for those records. Detaching must not detach another instance sharing an immutable definition.
|
||||
|
||||
`Fork imported definition` creates ordinary editable local neutral definitions or a local data graph, with fresh IDs and an explicit reference-rebind selection. It copies the dependency closure needed for the fork or retains explicit pinned references; no dangling private member escapes. The original imported definition and unselected uses remain pinned. This operation is different from changing a package's sealed bytes.
|
||||
|
||||
Removing a whole instance uses a reviewed deletion impact and one atomic command. Removing an unused mount/import is explicit; it cannot remove another current use's dependency. Garbage collection may reclaim package bytes only when no current document, history, pending accepted recovery snapshot or retained baseline needs them. Closing the project does not evict information required by its saved portable form.
|
||||
|
||||
## Concrete two-project example
|
||||
|
||||
Publish package `ControlPatterns`, PackageId `P`, version `1.0.0`, digest `D1`. It exports neutral Duration/ms/s and a reusable calculation, one OA data contract, and a monitor pattern. The OA pattern contains Activity `A`, an owned behavior/scenario with two distinct occurrences and a typed link; external participant role `R` is excluded from cloned membership. A separate SA export can carry Function/port structure and bind the host System. The IDs `P/A/R` are symbolic stable UUIDs for this example, not name-based resolution.
|
||||
|
||||
1. Project Alpha imports `D1` as import `I1`; Beta independently imports the exact same package. Both persist all required package bytes.
|
||||
2. Alpha instantiates the pattern twice. Maps are `A -> alpha_left` and `A -> alpha_right`, with distinct UUIDs for every copied occurrence/link/placement. Role `R` binds to different existing participants. Both can deliberately use the same immutable Duration definition and OA data mount. Beta's map has entirely different local IDs.
|
||||
3. Alpha changes the left activity's description and reorders its two occurrences. The right instance stays unchanged. Beta closes its project and its application.
|
||||
4. Publish `1.1.0` with digest `D2`, preserving `A` and other surviving member IDs. It changes the same description, adds a third occurrence, and removes another referenced member. Alpha imports `D2` as `I2`; `I1` is untouched.
|
||||
5. Update only Alpha's left instance. Preview shows the description conflict, the complete order conflict, the member addition and outside-reference deletion impact. The engineer keeps the local description, explicitly chooses a valid three-occurrence order and keeps the removed referenced member as detached local content. One Apply advances only this instance to `I2`; its surviving UUIDs remain stable. The right instance remains on `I1`.
|
||||
6. Undo restores Alpha's exact model/source/import/instance state and prior accepted package references; Redo restores the same reserved IDs and choices. Save and close Alpha, clear only disposable resolver caches, disconnect the network, and reopen Alpha/Beta from their portable files. Alpha has its selected `D2` instance plus the pinned `D1` instance; Beta still has `D1`. Their type/evaluation identities and results are derived from those exact bytes.
|
||||
|
||||
A variation binds a role to an invalid SA actor for the OA export, supplies two different pins of a shared dependency within one closure, modifies one package source byte without updating its digest, or removes a required archived package. Each variation rejects with a precise diagnostic and preserves the accepted project. A variation uses two package versions under distinct imports; it succeeds without conflating their definitions by alias or stable member ID alone.
|
||||
|
||||
## REST, migration and release acceptance
|
||||
|
||||
Extend the existing published Studio API, not an undocumented desktop-only endpoint. Read/query responses expose imports, origin, definition mutability, instance status and exact pins. Package inspection/upload accepts bounded explicit archives; import/instantiate/rebind/detach/update use the same pure core preparation as the GUI. A read-only preview response includes revision/closure identity and structured changes/conflicts; commit requires the current ETag and complete choices. A stale ETag or changed dependency rejects atomically. Independent clients must not need private Rust enum knowledge beyond the published schemas/examples. This is not a claim to implement the OMG Systems Modeling API.
|
||||
|
||||
A deliberate next schema/source version must add the chosen forms. Existing source7 includes remain ordinary project modules. Existing ScenarioUse/SequenceReference remain within-project reuse. Existing annotations, artifact links or filenames that look like library references do not become imports by heuristic. The default migration adds empty library state and preserves all accepted source/comments/IDs; neutral analysis migration is coordinated with its own design. Package-format evolution is independent and explicit: old immutable bytes keep their old digest, and supported readers either interpret that format correctly or request a republished/migrated revision.
|
||||
|
||||
The first vertical slice is complete only when it proves the following through core, source, REST and the actual native application. None has been executed in this report.
|
||||
|
||||
| Acceptance / falsifier | Required independent observation |
|
||||
| --- | --- |
|
||||
| L1. Shared definitions plus distinct architecture | Publish a package containing a usable data definition, neutral unit/calculation and OA/SA pattern exports; consume in two fresh projects and instantiate twice in one. Compare complete models, maps, typed references and exact package bytes. Two instances must not alias accidentally. |
|
||||
| L2. Real maintained update | Execute the description/order/deletion example above. Check local changes and outside references, explicit choices, base advancement, untouched old-version uses and stable surviving IDs. Compare against a separately constructed expected graph, not the planner's own candidate. |
|
||||
| L3. Exact history/recovery | Save/reopen, Undo/Redo and crash recovery retain exact authored source, all pins/maps, reserved IDs and raw invalid bindings/update drafts. Compare saved snapshots byte-for-byte and full models; semantically similar regenerated IDs fail. Preview/cancel creates no revision/history step. |
|
||||
| L4. Offline and missing content | Close both applications/projects, discard disposable caches, reopen offline. Exact pinned definitions/results remain available. Remove a required archive and observe a clear unresolved import with no mutation or fallback, then supply the exact bytes and recover. |
|
||||
| L5. Dependency and namespace failures | Test a diamond with conflicting dependency versions, a dependency cycle, same package/version with different content, duplicate manifest keys and IDs, case-colliding logical paths, unknown/private exports, alias collisions and aggregate-budget exhaustion. Test two legitimate concurrent versions under different imports. |
|
||||
| L6. Immutability on every adapter | Attempt direct/multi-level-Batch/Replace/source/REST mutations, reidentification and cascaded deletion of mounted/imported content. Every path either rejects unchanged or performs an explicit valid fork/rebind/removal. Changing an origin UUID or digest cannot make forged payload authoritative. |
|
||||
| L7. Typed visitor traps | Put identical UUID bits in a live local ID, package member, historical original map, artifact URI, description and expression text. Reidentify/delete the local object. Only the specified typed categories change; package bytes/literal content remain exact. Include current OA/SA historical semantics and a deleted managed member. |
|
||||
| L8. Domain closure | Pattern contains nested ALT/LOOP occurrences, ScenarioUse repeated bindings, operation allocation and message-field paths, contextual links, state machine transitions, OA/SA traces and data inheritance. Instantiate with valid/invalid bindings. Full core admission passes/rejects appropriately; no required relation is dropped to force success. |
|
||||
| L9. Layer and singleton fidelity | OA cannot bind an SA role; importing an SA pattern never clones a second System of Interest. Explicit parent and graphical placement choices preserve existing containment semantics. New neutral definitions do not bypass architectural layer checks. |
|
||||
| L10. Graphical task usability | At minimum and wide windows, publish/import, choose an export, bind the intended participant among repeated names, instantiate, inspect origin and resolve update conflicts. Use scope/kind groups, contextual search and a focused detail editor. A package browser or change review must not expand every member into one long homogeneous list. Record an action/time budget before the comparison and observe real task completion. |
|
||||
| L11. Independent API/source client | A client using the published OpenAPI and reST can supply package bytes, create imports/instances, query origin, preview/apply update, handle stale ETag, detach and export a portable document. Build equivalent accepted models through GUI/source/API and compare them fully. |
|
||||
|
||||
## Highest-value next experiment and reasons to revisit
|
||||
|
||||
Before a large implementation, run a small pure-core prototype against one existing DataType/Interface graph and the proposed neutral Duration/calculation definition. Implement only import resolution, one immutable mount, one pattern map and the exact document round-trip in an isolated experiment. Falsify the two-reference-shape bridge with source rename, local Reidentify, deletion, Replace, duplicate UUID bits and concurrent versions. If special cases spread into ordinary projection/command code instead of a confined resolver/admission adapter, switch to the uniform definition-reference design before proceeding.
|
||||
|
||||
Then implement the three-way update example with a conservative typed-facet merge. A complete valid candidate plus exact source history is the success criterion; a visually plausible diff is not. Native workflow design can use real inspection data from that prototype, but the package/reference contract must be reviewed before downstream UI/API/schema work.
|
||||
|
||||
Reasons to reopen the leading choice include a demonstrated need for virtual instances/overrides, exact shared data identity across layers, registry-driven dependency solving, collaborative package authoring, package signatures as a workflow requirement, or unacceptable measured size/performance of preserved package/history content. These would justify explicit design expansion, not hidden changes to pin or identity semantics.
|
||||
@@ -0,0 +1,107 @@
|
||||
# Scenario authoring: native Windows evidence, 2026-09-11
|
||||
|
||||
Codex-956atf `/root`. This is a partial capability checkpoint, not first-release
|
||||
acceptance. Actual Studio was operated through the Computer Use `sky` API against
|
||||
copies of the independently generated [fixture](fixtures/scenario-authoring/README.md).
|
||||
No fixture fields or expected transactions were changed to match the observed UI.
|
||||
|
||||
## Build and execution identity
|
||||
|
||||
- Rust implementation: `80cf197be6f1d400bf0b9c84bf8557f88c895aa6`.
|
||||
- `cargo build --locked -p oa-desktop --bin arcadia-studio`: exit0, 3m28s,
|
||||
warning-free dev build. Log `.local/logs/desktop-gui-integrated-20260911.log`.
|
||||
- Executable SHA256: `A5ED6DF334B1BFB620425AFDF3E863F0B522990E6FB47C6C401A71CF4443954A`.
|
||||
- Immutable native staging directory: `.local/native-qa/studio-80cf197/`.
|
||||
- Bundled `libunwind.dll` SHA256:
|
||||
`AA282FA47BB2C4E210CEA5E470CDBDCA58568F0BE0BC73E404D86AB9CD95EF6A`.
|
||||
- Process4416 opened the real Iced workspace. The launch helper initially reported
|
||||
no targetable window; a fresh window listing found the completed workspace.
|
||||
No second instance was launched. The debug console window was not automated.
|
||||
- Full desktop tests passed642/642 before this native run. Their executable/hash
|
||||
differ from the GUI; see [STATE](STATE.md). Formatting passed. Subsequent strict
|
||||
Clippy found two collapsible-if statements, corrected after this immutable build;
|
||||
the current lint gate is not yet claimed passing.
|
||||
|
||||
The native checker requires the task-local runtime on PATH; an initial invocation
|
||||
without the toolchain environment exited `-1073741515`. Sourcing
|
||||
`.local/toolchain/env.ps1` resolved that launch dependency. Both new OA/SA working
|
||||
copies then passed the baseline checker. This was a checker-launch error, not a
|
||||
semantic fixture failure. The GUI stage includes its runtime beside the executable.
|
||||
|
||||
## Observed navigation and layout
|
||||
|
||||
Opened `.local/native-qa/scenario-20260911/oa/project.arcadia` through Studio's
|
||||
normal Open dialog. The initial window captured1442×932 pixels, corresponding to
|
||||
the1440×900 client. The project contains62 elements, zero relations and11 fixture
|
||||
engineering warnings; that matches the independently constructed baseline.
|
||||
|
||||
At normal size, selected OA A caller and Behavior & scenarios. The new workspace
|
||||
keeps the scenario selector and compact controls above the remaining-height canvas.
|
||||
Fit displayed the whole nested caller at42%; opening Selection reduced available
|
||||
height and recomputed35%. These overview scales are for navigation, not readable
|
||||
detailed editing of every nested label.
|
||||
|
||||
1. Selected **OA Second use of B**, verified its name and alias
|
||||
`scenario_oa_61`, then Selection → Open definition. The canvas changed to
|
||||
**OA B verification** with Back to caller available.
|
||||
2. Selected **OA B use of C** (`scenario_oa_64`), opened C, then Back twice.
|
||||
First return restored B's exact use; second restored A's **Second use of B**,
|
||||
its Selection panel and35% overview. The initiating use was not replaced by the
|
||||
similarly targeted first use.
|
||||
3. Repeated A→B→A through **OA First use of B** (`scenario_oa_60`). Return selected
|
||||
that first occurrence and preserved its presentation.
|
||||
4. Switched A to100%, scrolled the actual canvas until the two reuse blocks were
|
||||
visible, opened B and returned. The first-use block returned to the same visible
|
||||
y-position (top646, label666 in the captured window) and remained selected.
|
||||
A subsequent upward scroll moved naturally; Save did not snap it back.
|
||||
5. Save all completed. Independent `check baseline` passed the whole Project and
|
||||
both reachable source files, including the retained note. Navigation introduced
|
||||
no accepted source/model difference in this checkpoint.
|
||||
|
||||
Resized through the Windows system-menu Size command, using Right/Down then a
|
||||
pointer placement. The resulting capture was1102×732 pixels:1100×700 client, the
|
||||
application's configured minimum. The initial corner drag did not resize; it is
|
||||
not counted as a sizing result. At minimum size, Fit recomputed21% with Selection
|
||||
open and28% after closing Selection. Focus canvas hid the side panels and Restore
|
||||
panels remained accessible. Normal-scale editing retained a real scrollable canvas.
|
||||
|
||||
## OA action: creation and exact history pass
|
||||
|
||||
Performed the fixture's prescribed `oa-action` task at the minimum1100×700 client,
|
||||
with focused canvas and100% scale. Tools → Add action exposed an explicit root
|
||||
insertion line labeled before **OA Root entry**. Clicked that line at the
|
||||
**OA A inspector** lifeline, not the Tools append action.
|
||||
|
||||
The pending marker retained the chosen owner/before-slot/lifeline. The bottom form
|
||||
kept **Create** and **Cancel** pinned while its fields scrolled independently.
|
||||
Entered literal name **OA native action**, selected work **OA Inspect ticket**,
|
||||
and confirmed the preselected observed lifeline **OA A inspector**. Create added
|
||||
one action before Root entry; the canvas showed63 objects and selected the new
|
||||
action. Save all completed.
|
||||
|
||||
| Native stage | Independent result | Preserved whole-directory snapshot |
|
||||
| --- | --- | --- |
|
||||
| Before Create | Previously checked baseline | `.local/native-qa/scenario-20260911/oa-baseline-verified/` |
|
||||
| Create, Save | `check oa-action` PASS | `oa-action-verified/` under the same run directory |
|
||||
| Ctrl+Z, Save | `check baseline` PASS; `same baseline-verified working` PASS | `oa-action-undo/` |
|
||||
| Ctrl+Y, Save | `check oa-action` PASS; `same action-verified working` PASS | `oa-action-redo/` |
|
||||
|
||||
Every `same` comparison covers all Project identities/fields and every SourceBundle
|
||||
byte. The semantic checker borrows only the unique fresh role UUID and independently
|
||||
predicts the remaining graph. The verified snapshots were preserved before Undo;
|
||||
restored snapshots did not replace them. All checker commands exited0. Tool outputs
|
||||
record both semantic and exact equality passes.
|
||||
|
||||
## Open native gates
|
||||
|
||||
OA nested state observation/reuse/fragment and all four SA creation checkpoints,
|
||||
final reopen, blocked navigation/cancellation/recovery, detailed-list definition
|
||||
entry, minimum-size nested caller return, and B4 lifecycle rendering remain open.
|
||||
This report does not infer them from the passing root action. B4 is still a pure
|
||||
cfg(test) projection; independent Scene review identified lifetime bounds,
|
||||
branch-local activation clipping, incomplete-lane geometry and self-arrow endpoint
|
||||
work before production integration.
|
||||
|
||||
Continue from the saved OA action state in the run directory, following the exact
|
||||
fixture procedure. Root retains native input; concurrent source builds use the
|
||||
separate target tree and must not overwrite the running staged executable.
|
||||
@@ -0,0 +1,124 @@
|
||||
# Independent review of the paired analysis and library proposals
|
||||
|
||||
Codex-956atf `/root/semantics_critic`, resumed 2026-09-11. This is a design review, not an implementation test or release acceptance. Read the full revised objective in attachment `a49d1780-25d5-4778-ad68-6140c60e4207`, both proposals, the requirements delta, Gitea issue #1 through #102, the empty open-PR list and Wiki Home. Ownership is recorded in #103. Wiki Home describes an older checkpoint. Another host's earlier comments do not establish current activity.
|
||||
|
||||
Owned output is this file only. No production or ledger edits, Cargo, native application input, commits or pushes. Root was integrating unrelated behavior/packaging changes while this review ran; inspected semantic boundaries remained unchanged. Source HEAD observed during review: `865cd55e21e622985322d711b23e6d653b563d3d`.
|
||||
|
||||
References below use **A** for [analysis proposal](release-analysis-semantics-design-20260910.md) and **L** for [library proposal](release-libraries-semantics-design-20260910.md). Line numbers identify the versions initially reviewed; section names and quoted concepts identify the locations if the authors add follow-up text. Both explicitly remain proposals. A deliberate exclusion or unfinished experiment is not reported as a shipped defect. P1 means a contract decision or required workflow must be resolved before the relevant production foundation is ratified; P2 means a concrete design weakness or incompleteness to resolve before acceptance.
|
||||
|
||||
The analysis author revised and froze A during review. Re-read its new section 3.4, exact literal rules and compatibility discussion. Final observed SHA256: A `BF631450F46FF19AA09D142B964B60FA380309E4A728F895D1ECEC3ECBF6EF41`; L `29687171ED01FE4A5A8C2F3B3493008C144189D44349524CDFF825862D41BE72`. R7 is corrected at proposal level; R2/R4 are now explicitly acknowledged consequential choices in A. That acknowledgment improves the proposal without resolving the choices.
|
||||
|
||||
## Recommendation
|
||||
|
||||
Keep the pure evaluator, typed expression references, exact package pinning, editable materialized architecture, explicit bindings, complete old instance baseline and atomic document admission. These are compatible foundations. Do not ratify the entire paired design yet. In particular, byte-level package identity must not accidentally become the only available engineering compatibility policy; and a source export with omitted management records does not demonstrate text-only authoring.
|
||||
|
||||
The strongest immediate comparison is a compact direct-value/baseline design with one explicitly based alternative case against A's complete-case design, using both authored text and the native workflow. For libraries, retain materialized patterns, but decide the cross-revision definition policy and source creation/update normalization before committing to the hybrid mount implementation.
|
||||
|
||||
## Findings
|
||||
|
||||
### R1 — P1: the source example omits the information needed to author a managed instance
|
||||
|
||||
**Locations:** L, “Textual source and portable admission,” lines 145–175, especially the comment at 165; “Proposed persistent model,” lines 112–139. A, “Minimum GUI and source work,” lines 192–203. Existing contract: `docs/language.rst:1772–1781`; `crates/oa-core/src/source_project.rs:286`; `crates/oa-server/src/store.rs:116–130`.
|
||||
|
||||
The library example names an import, export, binding and member, then replaces the exact baseline/correspondence with a comment. Those records are authoritative for future updates, not optional display details. The proposed portable envelope solves transport and offline availability, but does not specify how an engineer creates, updates or repairs those records using text alone. A full serializer grammar would establish expressiveness; requiring users to hand-copy the old typed graph, identity map and lineage still fails the new low-clutter authoring criterion.
|
||||
|
||||
**Minimal falsifier:** start with an empty project directory and an available package, without a GUI or preexisting instance. Write a readable declaration for two instances; normalize/compile it; edit one local occurrence; upgrade that instance to a new package while retaining the edit. The proposal currently has no specified text operation that creates the complete baseline and no complete example of the update. Supplying a GUI-generated snapshot as the starting point would evade this task.
|
||||
|
||||
**Smallest convergence:** distinguish a concise authored creation/update request from its accepted, fully explicit normalized state. A Rust source command may allocate/stabilize IDs once and emit a declared, version-controlled management module containing the exact base/map/lineage. Specify when this happens, how repeated compilation stays inert, how conflicts are expressed and committed from text, and how diagnostics point to authored input or generated metadata. That module is part of the portable source envelope and published grammar, never an invisible desktop cache. An alternative is a fully authored management syntax, but it must win the same task without manually rebuilding snapshots. Existing missing-UUID stabilization is a useful precedent, not proof that instance normalization already exists.
|
||||
|
||||
**Acceptance:** a human-readable tutorial performs initial publication/import/two instantiations/local edit/selective update/detach entirely through text plus the published Rust tooling. Reopen from only the directory and packages. Compare the full model and exact accepted metadata to independently constructed expectations. Measure relevant text edits and incidental identity/bookkeeping edits separately. A smaller displayed snippet must not hide mandatory work.
|
||||
|
||||
### R2 — P1: cosmetic package changes can make selective updates unusable across unchanged definitions
|
||||
|
||||
**Locations:** L common contract lines 51–56, layered mounts line 72, two-project example 253–260; A unit rules 227–241 and library boundary 293–300. Existing layered compatibility: `crates/oa-core/src/data.rs:129–145` checks local identity ancestry.
|
||||
|
||||
L hashes exact comments/line endings and assigns new revision identity to changed bytes. A makes that whole pinned revision part of quantity-kind equality and rejects named-kind-to-named-kind `AsKind`. This is a deliberate conservative policy, but its interaction with selective instance updates is not closed by the worked example.
|
||||
|
||||
**Minimal falsifier:** package P contains Duration, second and two-duration calculation plus a monitor pattern. Alpha has two P@D1 instances and a total budget over both. Publish D2 changing only a pattern description or a source comment; all Duration/unit definitions and stable member IDs are identical. Update only Alpha's left instance as required by L2. If its imported references advance, left Duration@D2 and right Duration@D1 cannot be added. The supported unit conversion requires equal kind and `AsKind` refuses this named-to-named conversion. If references stay on D1 instead, the proposal needs a defined mixed-version materialization/base policy and must not claim the instance now derives wholly from D2.
|
||||
|
||||
The analogous mount problem is concrete: a new mount receives new local IDs. An unchanged item/interface in D2 is not in D1's local ancestry, so existing item/interface satisfaction does not consider it compatible. Rebinding only the chosen pattern can require edits to unchanged outside ports, allocations and message paths. An explicit rejection protects integrity but does not by itself complete a usable selective update.
|
||||
|
||||
**Choose one policy before ratification:**
|
||||
|
||||
- Keep exact byte pins for reproducibility and additionally define validated semantic identity/compatibility over a typed definition and its relevant dependency closure. Cosmetic package bytes may differ while the verified definition remains compatible. Do not substitute name matching or a publisher's unverified flag.
|
||||
- Keep strict revision types and provide a first-class, checked compatibility bridge or selected-use migration that works for genuinely unchanged definitions and shows all affected consumers. Specify bridge scope and composition.
|
||||
- Deliberately require stable shared vocabulary packages, so pattern-only packages can change while unit/data dependencies stay pinned. This is the smallest initial experiment, but it imposes a package-authoring constraint and does not solve updates to the vocabulary itself. Revise the bundled-definition example accordingly and retain the wider gate.
|
||||
|
||||
Do not silently choose structural equivalence for all equal-dimensional kinds: Energy/Torque still require their intended distinction. The needed distinction is between archive reproducibility, definition identity, and permitted use-site compatibility.
|
||||
|
||||
### R3 — P1: a valid subjectless analysis case falls out of the proposed pattern closure
|
||||
|
||||
**Locations:** A meanings 59–63, root placement 132 and integration 305–307; L publication closure 84–87. Existing transition closure: `crates/oa-core/src/transitions.rs:504–571`; existing kind mapping `:203–235`.
|
||||
|
||||
A deliberately makes property/case records layer roots, gives a property an outgoing subject reference, and allows a case's explanatory subject to be absent. L says to include new analysis records whose subject is included. Those rules do not find a subjectless case that binds the included properties. Checks have a case parent and no subject. Following ordinary ownership or outgoing references from the activity cannot recover this inverse relationship.
|
||||
|
||||
**Minimal falsifier:** Activity A has property p. Subjectless case C binds p to 750 ms and owns check K. Publish A as a reusable pattern with its analysis. The stated closure can include p because its subject is A, but neither C nor K qualifies by subject. The resulting instance has the property declaration and loses its value/check. Conversely, blindly including every case that mentions p can pull an unrelated project-wide case, its other properties and their architectural subjects into this small pattern.
|
||||
|
||||
The same topology matters to OA→SA: selecting A with Subtree currently follows children and outgoing references. New kind mappings alone do not make root-associated p/C/K travel with A. A acknowledges that transition rules need work; this example identifies the decision those rules must make.
|
||||
|
||||
**Smallest convergence:** specify analysis selection as its own reviewed export/transition facet: explicitly selected whole cases, their checks, the properties they use, and declared external property/subject bindings. Show omitted analysis on the selected subject instead of silently treating its absence as complete. Do not automatically slice a case's formula graph or copy all mentioning cases. Decide how reusable patterns store shared formulas versus per-instance assumptions. Add a prototype-local neutral-definition reference rule: a pattern's `Local(Duration)` must become the intended pinned imported reference or explicitly copied local definition; it cannot be sent through the ordinary local architectural ID remapper without a category decision.
|
||||
|
||||
**Acceptance:** use one subjectless local case and one project-wide case sharing p; publish/instantiate and forward/reverse-transition the small subject with explicit choices. Assert retained/omitted values, checks, external bindings, neutral pins and untouched outside analysis. No graph traversal may choose the scope by accident.
|
||||
|
||||
### R4 — P2: complete independent cases duplicate the very formulas and fixed inputs engineers need to maintain once
|
||||
|
||||
**Locations:** A candidate ranking 34–41, examples 164–198 and comparison 203. The report already makes D conditional; the current evidence does not justify promoting it over B.
|
||||
|
||||
**Minimal falsifier:** two cases use the same inputs/formula/check except one duration. The provided example repeats the unchanged dispatch value, total expression and predicate. Change the requirement threshold once. Unless the engineer locates every separate check, the two cases now test different requirements while both can still reference the same descriptive Constraint. Factoring a calculation helps the formula but still adds parameters/calls/bindings and does not automatically share the check's threshold.
|
||||
|
||||
At a larger, explicit scale, take 20 fixed inputs and 2 varying inputs in each of 20 cases. D needs 440 input assignments before repeated results/checks; baseline plus overrides needs 22 baseline assignments and 38 changed input assignments for 19 alternatives. These are representation counts, not measured human task times. Some independent studies truly need frozen separate assumptions; ordinary engineering properties do not all need that semantics.
|
||||
|
||||
**Alternative worth prototyping:** a property contains its baseline value or derived formula; each optional case explicitly names that baseline and stores only deviations, with a single inheritance level. Evaluation reports each input's origin and the captured baseline/case revision. Distinguish “clear override/use baseline” from explicit unbound. No dependence on active UI selection and no unnamed hidden default case. If frozen assumptions are needed, make snapshotting a deliberate operation. This introduces resolution rules but removes routine duplicate authoring; compare the costs, rather than treating record-count simplicity inside the evaluator as user simplicity.
|
||||
|
||||
**Decision test:** first single property, two-input budget, 20-case single-threshold change, and intentionally frozen study. Measure source lines/edits, wrong-context changes and native task completion. D can still win if its complete-case isolation proves materially clearer, but the comparison must include maintenance rather than only first creation.
|
||||
|
||||
### R5 — P1: crossing OA/SA with mounted data needs an explicit origin and update disposition
|
||||
|
||||
**Locations:** L layered-definition policy 69–76, pattern layer policy 70 and acceptance L9; A transition rule 307. Existing transition mapping includes DataType/DataField/Interface/ExchangeItem (`transitions.rs:213–233`) and follows the required contracts (`:522–539,568–571`).
|
||||
|
||||
**Minimal falsifier:** an OA activity exchanges a mounted library item. Transition the activity/exchange to SA. Same-layer validation requires a compatible SA item. L forbids treating the OA mount as an SA mount, and a package need not provide a matching SA export. Current transition behavior can copy the shared data body into ordinary local SA records; retaining a mount marker would instead violate the immutable mapped payload/layer. Neither outcome has a specified library lifecycle in the proposal.
|
||||
|
||||
**Smallest convergence:** offer an explicit choice in the transition plan: bind a compatible exact-pinned SA export, or create a local SA derivative with preserved origin/trace and clearly defined independence from library updates. If neither is valid, return a located unresolved decision. Do not silently fork, silently retain an invalid mount, or require the engineer to abandon the whole normal transition workflow. The reverse transition and later source-library update must follow the same policy. An ordinary OA/SA semantic trace may record correspondence, but it cannot pretend that package update management was preserved.
|
||||
|
||||
This does not require globally neutralizing existing data semantics. It is the concrete test that should decide whether the hybrid mount adapter is simpler than uniform qualified data definitions for this product.
|
||||
|
||||
### R6 — P2: anonymous derived dimensions need a closed intermediate operator algebra
|
||||
|
||||
**Locations:** A ScalarType 75–80, Expr 118–129, numeric rules 223, unit table 229–241 and public value 271.
|
||||
|
||||
**Minimal falsifier:** evaluate `AsKind(Energy, f1 * length1 + f2 * length2)`. Each product is specified to become an anonymous dimension. Addition is specified for equal resolved kinds; anonymous values have no such kind. The sketch contains no intermediate type, so accepting, rejecting or requiring two inner `AsKind` operations is currently an implementation choice. Similarly examine `(mass * length) / time`, comparison of two anonymous products, and anonymous dimensionless intermediates.
|
||||
|
||||
**Smallest convergence:** define a separate closed internal type algebra including anonymous dimensions, then specify every permitted unary/binary/conditional/Sum combination and when the result retains or loses a named kind. It is reasonable to require explicit kind assertion at a declared output; it is unnecessary to force extra casts solely because the internal type sketch is incomplete. A worked force/energy expression should compile to an unambiguous typed tree before GUI/schema work. The conservative affine point/difference table itself does not supply a counterexample and can be retained.
|
||||
|
||||
### R7 — corrected during review: source numeric limits must admit every accepted exact literal AST
|
||||
|
||||
**Locations:** A exact-number contract 217–221. Existing round-trip obligation: `docs/language.rst:1772–1781`; the server explicitly compares the formatted/recompiled model (`store.rs:116–122`).
|
||||
|
||||
Initial proposal allows a 4,096-bit canonical wire numerator/denominator, but source numeric tokens have at most 256 decimal digits and exponents at most 128. `Expr::Number(10^300/1)` is within 4,096 bits, yet its integer spelling has 301 digits and its compact decimal exponent exceeds 128. Rewriting it as arithmetic changes the AST; full model parity is not merely numerical equality. A read-only .NET BigInteger calculation confirmed the 301-digit spelling; no evaluator was run.
|
||||
|
||||
The analysis author acknowledged and corrected this in the frozen section 4.2, now lines 238–244: up to 1,234 decimal component digits, actual 4,096-bit admission bounds, canonical integer/ratio output, and explicit literal AST/source/JSON closure. I read back that correction. The added `1/2^4095` example also avoids demanding an excessively long terminating decimal spelling. This closes the identified proposal contradiction; runtime conformance remains untested. Boundary tests must construct an accepted literal via JSON and round-trip the exact AST through source; testing only arithmetic results misses the problem.
|
||||
|
||||
## Choices that can converge now
|
||||
|
||||
| Product criterion | Candidate comparison | Recommended next decision |
|
||||
| --- | --- | --- |
|
||||
| Small-model text and graphical authoring | Baseline properties avoid a compulsory separate case/binding for each first value; complete cases make assumptions explicit but add authored records. | Prototype B and D against the same maintenance tasks. Do not ratify D from evaluator simplicity alone. |
|
||||
| Maintained reuse with ordinary local editing | Materialized patterns preserve the current authored graph; virtual instances introduce another effective-model/override system. | Keep materialized patterns and exact typed three-way comparison. |
|
||||
| Offline reproducibility | Exact pins, supplied package bytes and immutable revision imports are consistent across both designs. | Keep them; separate type compatibility from archive identity under R2. |
|
||||
| Source-only engineering | Full-state serialization is necessary but does not define initial authoring or update resolution. | Require concise authored requests plus explicit normalized management state, or demonstrate an equally usable complete alternative. |
|
||||
| OA/SA fidelity | Hybrid mounts preserve current layer checks; uniform references may simplify shared definition identity. | Decide using the mounted-item transition and selective-update falsifiers, not the number of touched Rust files. |
|
||||
| Numeric correctness and breadth | Q1 gives a precise rational foundation; approximate engineering functions remain openly unresolved. | A bounded exact experiment is reasonable. It cannot stand in for the declared broader release capability; freeze operator closure and source/JSON limits first. |
|
||||
|
||||
No new factual standards claim was needed for these findings. They follow from the proposals, revised user requirements and inspected repository code. Primary standards cited by the authors can inform the later capability boundary but do not resolve Studio's identity or source-authoring choices automatically.
|
||||
|
||||
## Deliberately not reported as defects
|
||||
|
||||
The exact stored old baseline, immutable original map plus explicit current lineage, typed foreign/live/historical reference categories, no UUID-shaped string rewriting, complete source/package admission, stale-preview rejection, explicit order conflicts and no hidden deletion cascade are coherent requirements. The prototypes must prove them; merely noting that current code does not yet implement new proposals would not be an independent finding. Existing `vacant`/Project identity checks and deletion visitors do require the already-planned reservation/category changes, but that is acknowledged integration work.
|
||||
|
||||
The affine point/difference separation, exact rational budget, distinct false/missing/failed outcomes and evaluation purity are compatible as specified. Unsupported trigonometry is openly a scope/acceptance decision rather than a secret arithmetic defect. A future approximate domain needs a justified profile; this review does not prescribe a full solver or all of SysML.
|
||||
|
||||
## Focused experiment handoff
|
||||
|
||||
Before broad production changes, build one disposable pure model/source experiment that can be driven without Iced: two properties and a budget; a subjectless case; one package containing units, an item/interface graph and a pattern; two consumers and two instances. Exercise R1–R3/R5 together: authored creation, cosmetic package revision, selected update with an outside budget/contract, explicit analysis selection, and OA/SA transition. Add the exact literal and anonymous-dimension expressions from R6/R7. Independently construct expected accepted graphs and rejected decisions.
|
||||
|
||||
The useful output is a contract choice supported by the complete small workflow, including the final authored text and normalized metadata. Passing a resolver-only prototype or showing a shorter source excerpt would not answer these questions. Root owns ratification, implementation and all remaining release gates.
|
||||
@@ -0,0 +1,214 @@
|
||||
# Text-only systems modeling: current source7 and competing authoring designs
|
||||
|
||||
Codex-956atf `/root/requirements_delta`, 2026-09-11. Bounded language-design investigation for root synthesis and independent criticism. **No candidate below is ratified, and this report does not accept the release.** Owned files are this report and the isolated `harness/experiments/textual-authoring-20260911/` experiment. No production parser, specification, model, GUI or API edits; no Cargo or native application input.
|
||||
|
||||
Read the complete current `PROJECT_GOAL.md`, SHA-256 `DD58F75C93D55FE16ED141A23D834898FB6EBC625AE7E7AE379DA552A8312435`, AGENTS.md, issue #1 through #117, the empty open-PR list and Wiki Home. The Wiki records an older checkpoint. Coordination is in #112. Codex-9e8r6t `/root/palette_finish` independently owns the task-based usability audit and narrow documentation corrections (#113/#116); this report concentrates on language coverage, identity, source/API behavior and architecture alternatives. Their separate small-recipe execution is #117. Root owns integration and all release decisions.
|
||||
|
||||
Inspected source began at `865cd55`; the completed probe ran while HEAD was `80cf197be6f1d400bf0b9c84bf8557f88c895aa6`. Root granted a bounded reader lease after its desktop suite, then continued its GUI build. The probe used the completed core artifact identified below and wrote only isolated experiment files. The lease is finished. Source line references identify the inspected local version; the other host's pending documentation corrections can shift them.
|
||||
|
||||
## 1. What the evidence establishes
|
||||
|
||||
Source7 can express the current persistent OA/SA model through readable declarations, typed values and explicit references. It already supports useful omission of ordinary defaults, nested ownership, forward references, multiple files and identity-preserving updates. A complete engineering example authored without existing GUI records passes the real core. Calling this merely a JSON export, or claiming that text-only modeling is absent, would be incorrect.
|
||||
|
||||
The principal weaknesses are the amount of identity and constructor scaffolding exposed during ordinary work, a project-wide alias namespace even across nested modules, limited source-oriented refactoring/navigation, and the absence of an ordinary local check/stabilize/refactor command-line tool. REST can support a source-only workflow today, but engineers must manage the bundle, returned stable identities and revision protocol. Canonical export makes default values explicit and expands small models substantially; it should not be used as a proxy for the best current authored syntax.
|
||||
|
||||
**Leading candidate for an experiment:** preserve the current authoritative model and exact source envelope, provide a real source-only tooling path, and trial domain-specific syntax that lowers to the existing model with explicit identity and order rules. Compare that approach against a redesigned declaration/namespace language and against separating identity/history metadata. Keeping today's UUID clauses is a conservative trial boundary, not a conclusion that the new low-clutter requirement has been satisfied.
|
||||
|
||||
The newly required calculations, quantities and maintained libraries remain separate semantic work. Better spelling for source7 cannot supply their missing behavior; their unratified designs and paired criticism are in the adjacent analysis/library reports. Conversely, adding those concepts with raw implementation-shaped records would deepen the present authoring problem.
|
||||
|
||||
## 2. Complete small example and executable evidence
|
||||
|
||||
The complete initial source is [alarm-response.arcadia](experiments/textual-authoring-20260911/alarm-response.arcadia). It has no external includes, libraries, missing GUI-created subjects or unexplained UUID prerequisites. Starting with an empty editor, an engineer can author this file and submit it as one source bundle.
|
||||
|
||||
It models a plant operator detecting an alarm and a maintenance team assessing it, explicit responsibility allocation, a pressure-report payload, a capability, a two-contribution operational process and a typed notification scenario. SA adds a console, classification function and chain, an owned state machine, a signal-triggered transition and a reviewed OA/SA refinement. An artifact link identifies procedure evidence, and a saved view places both operational activities. The pressure text is a descriptive annotation under current semantics; it is not an evaluated quantity. The URI is opaque evidence metadata, not a claim that a procedure was fetched.
|
||||
|
||||
There are 40 persistent identities: project, 25 elements, 9 relations, one diagram, two placements, one artifact and one trace. The final example produces **no structural errors and no engineering warnings**. That establishes a complete admissible small source example, not the engineering adequacy of every imaginable alarm system or the usability of its rendered diagram.
|
||||
|
||||
| Form | UTF-8 bytes | Lines | What was measured |
|
||||
| --- | ---: | ---: | --- |
|
||||
| Initially authored, new IDs omitted | 4,373 | 110 | Exact initial fixture, already omitting ordinary default fields and nesting owned elements. |
|
||||
| Accepted/stabilized | 6,053 | 110 | Actual `compile_bundle` result; 40 explicit UUID clauses inserted, existing source retained. |
|
||||
| Canonical single-file export | 9,710 | 344 | Actual `language::format` result from that same model; defaults and flat records emitted. |
|
||||
|
||||
Stabilization adds exactly 1,680 characters here: 40 clauses of 42 characters each. That is 38.4% growth over the initially authored text. Canonical export is 2.22 times the initial byte count and 3.13 times its line count. These are representation measurements, not measured task times or proof that fewer characters always improve comprehension. The initial source has 41 reference occurrences, 78 semicolons, 108 brace characters, 10 empty declaration bodies, four `none` tokens and one empty-list token. Display names and aliases are separately required for every named declaration; the two placement declarations omit display names by design.
|
||||
|
||||
The saved canonical result contains 39 empty description fields, 18 `none` tokens and seven empty-list tokens. Some of those fields represent required reviewed history, so these counts must not be converted into a blanket deletion rule. The authored example intentionally retains the two empty descriptions in its reviewed trace baseline because historical observations and live defaults have different meanings.
|
||||
|
||||
### Probe scope and reproducibility
|
||||
|
||||
[probe.rs](experiments/textual-authoring-20260911/probe.rs) was compiled directly with Rust 1.98.1, host `x86_64-pc-windows-gnullvm`, without Cargo. Root designated `target/debug/deps/liboa_core-6c8da57367eec642.rlib` as the completed suite's core artifact; SHA-256 before and after was `D7EFB5F3C423FF8AF13637F53CC481502C7F317BF01E9D072F9EFD64CD954C13`. The successful output is [probe-output.txt](experiments/textual-authoring-20260911/probe-output.txt). The temporary executable was removed after use.
|
||||
|
||||
Executed assertions and reported diagnostics establish:
|
||||
|
||||
1. Initial source7 admission, all 40 expected identities and no warnings; canonical parse equality and canonical idempotence.
|
||||
2. Recompiling the returned stabilized source preserves the exact model and bundle. Recompiling the original missing-ID source allocates a different project identity.
|
||||
3. Renaming only a raw declaration alias rejects because its old uses remain unresolved. A prepared `SetAlias` command keeps the UUID and rewrites every live reference while retaining the attached comment.
|
||||
4. Reparenting the nested assessment activity to the root through the shared prepared command/updater retains its identity and attached comment. Moving a root participant into an included file preserves the entire model.
|
||||
5. Omission of a fresh source7 scenario's viewpoint resolves to `MixedLegacy`. Removing `Action.lifeline none` and `Exchange.message_kind Asynchronous`/`reply_to none` from this fixture leaves the admitted model unchanged.
|
||||
|
||||
Actual source snapshots are retained under [observed](experiments/textual-authoring-20260911/observed/stabilized.arcadia): stabilized, canonical, renamed, reparented, and a split entry plus participant fragment. They are separate experiment outputs, not one bundle containing all six alternatives. The initial fixture SHA-256 is `D5E75F60081A7D99B0E10387C5D722064ABBE022A022F376D7BF742AC0D69B0B`; the final probe source is `F62AD8C55DD06B15F59E7A86AC11A7A77505456BE09F5AA96DB7F681280CC18C`.
|
||||
|
||||
The probe is deliberately bounded. It did not run HTTP, the native editor, save-journal fault injection, a new language prototype, a performance benchmark or a comprehensive comment-preservation suite. Existing test source supplies additional contract evidence but is not a newly executed result in this report. The first probe had three honest completeness warnings; the final source resolved them with an explicit Flow mechanism, reviewed trace prose and SA chain rather than suppressing validation.
|
||||
|
||||
To reproduce after root grants access to a matching built artifact, initialize `.local/toolchain/env.ps1`, compile the probe with `rustc --edition=2024`, an explicit `--extern oa_core=<matching rlib>`, `-L dependency=<matching deps directory>` and `-C linker=clang.exe`, then pass the initial fixture path and a new isolated output directory. Do not use a different toolchain's or target's rlib and infer a semantic failure from linker incompatibility. A portable product CLI is a proposed outcome, not this developer-only command.
|
||||
|
||||
## 3. Current semantic-family reachability
|
||||
|
||||
The declaration dispatcher is generated from all supported `Kind::ALL`/layer pairs and all `RelationKind::ALL`, plus diagrams, placements, artifacts and traces (`language.rs:295–330`; `model.rs:69–109,900–925`). The typed resolver then validates closed records (`language.rs:1594–1808`). Thus the following is a current representational coverage map, not a claim that each authoring task has been timed or independently exercised through all interfaces.
|
||||
|
||||
All source paths below are under `crates/oa-core/src` unless otherwise stated.
|
||||
|
||||
| Semantic family | Current text-only path and evidence | Important authoring cost or boundary |
|
||||
| --- | --- | --- |
|
||||
| OA participants, roles, work, missions and capabilities | `oa_entity`, `oa_actor`, `oa_role`, `oa_activity`, `oa_mission`, `oa_capability`; nested decomposition plus explicit allocation/role/mission/capability relations. `docs/language.rst:94–102,210–224,240–290`; `examples/source-project/oa.arcadia`. | Nesting is containment only. Allocation must remain explicit. Global aliases are needed even for locally nested work. |
|
||||
| SA boundary, actors, functions and services | `sa_system`, `sa_actor`, `sa_function`, `sa_mission`, `sa_capability`, `sa_functional_chain`; corresponding relations and explicit OA/SA trace. Same declaration catalog and `examples/source-project/sa/`. | There is at most one System. A function nested inside its performer would be an ownership mistake, not helpful syntax. Source must express functional decomposition separately. |
|
||||
| Exchanges, contracts and interfaces | Items, categories, data types/fields, interface allocation, associations, typed ports, communication means, functional/boundary exchanges, exchange/port allocations, interface provision/requirement. `docs/language.rst:103–120,149–165,240–263,303–307`; `examples/release1/oa/types.arcadia` and SA types. | `type_ref { Named @type; };` and nested typed contracts expose constructor wrappers. Functional exchange endpoints require explicit function and port references. GUI convenience may create several records; raw text must supply their full valid graph. |
|
||||
| Process/chain contributions and reuse | `steps`, Action/Exchange/Control/SequenceReference occurrences, SequenceLink, ContextualLink with owner/reference path/leaf/purpose. `docs/language.rst:167–205,548–614`; `examples/release1/oa/behavior/process_oa_assessment_procedure.arcadia`. | Owning an occurrence does not add it to `steps`; declaration order does not create precedence. A reusable-call path identifies an occurrence instance, not just a named callee or work element. Simplification must preserve those distinctions. |
|
||||
| Scenarios, fragments, calls/replies and reuse | Explicit viewpoint/context; lifelines; Exchange/Action/State/Fragment/Branch/ScenarioUse; ordered membership, bindings, operation identity and qualified MessageValues. `docs/language.rst:617–743`; `model.rs:550–589`; `examples/release1/oa/behavior/scenario_oa_full_scenario.arcadia`. | A repeated message needs a new occurrence identity. Nested Branch/Fragment/ScenarioUse constructors plus explicit membership/binding lists are among the most verbose ordinary authoring forms. No syntax sugar may flatten alternatives or erase caller qualification. |
|
||||
| State and mode behavior | Machines, regions, all 13 StateKind vertices, events, transitions, state actions and availability. `docs/language.rst:130–141,745–873`; `examples/release1/sa/behavior/state_machine_sa_monitor.arcadia`. | Hierarchical nesting already removes most `parent` repetition. Event constructors and typed/prose action alternatives still require clear guidance. State geometry and transition topology are separate records. |
|
||||
| Constraint and value annotations | `oa_constraint`/`sa_constraint`, message expressions, entry/exit/do/guard/event strings; existing bounded data defaults. `docs/language.rst:142–165,201–205,658–670`. | Existing strings are fully editable but not evaluated calculations or unit consistency. The requirements delta and analysis proposal remain authoritative about the missing numerical semantics. |
|
||||
| Saved presentation | `diagram`, `node`, projection constructors, routes/labels/anchors, view options and categories; `docs/language.rst:1009–1176`; `examples/release1/views/`. | Every persistent view field is representable. Typing coordinates is possible, but default overlapping placements do not make a good diagram. Derived camera/selection/viewport data must stay outside the semantic source. |
|
||||
| External artifacts | `artifact` with owner, relation, URI, revision and fragment; `language.rs:1778–1788`; the complete example above. | Opaque URI/revision strings are usable from text; their existence is not evidence of retrieval, synchronization or file execution. |
|
||||
| OA/SA trace and review history | `trace`, endpoints, kind, prose baseline and typed semantic facets; `docs/language.rst:1179–1490`; `language/semantic_source.rs`; `harness/fixtures/release1-native/semantic-keyed.arcadia:392–430`. | Historical `uuid` literals may refer to deleted records. Their keys/review observations are meaning-bearing state, not optional comments or live `@alias` links. Manual history authoring is expressible but burdensome; review APIs can generate the accepted facts. |
|
||||
| Whole-document lifecycle and modularity | SourceBundle, explicit includes, source migration, exact updater; `docs/language.rst:1645–1885`; `source_project.rs:286,780`; `source_files.rs:329,819,1041`. | Pure compilation reads supplied files only. Current bundles reject unreachable supplied files; desktop draft buffers may additionally retain detached files before selecting the reachable bundle. No package namespaces or maintained library imports are implied by includes. |
|
||||
|
||||
This covers all major current semantic families, including the less visible historical and presentation data. The general parse/format contract represents all persistent fields, but it does not prove comfortable authoring. Maintained cross-project library semantics and evaluated analysis remain unimplemented extensions; text/GUI/API designs for them must enter the same coverage matrix before the intended full end state can be accepted.
|
||||
|
||||
## 4. Identity, references, partial edits and source-only workflow
|
||||
|
||||
### What current identity actually means
|
||||
|
||||
`Project`, elements, relations, views, placements, artifacts and traces share one UUID and alias namespace (`docs/language.rst:48–56`). Display names may duplicate. An alias is a stored source label, not identity derived from a name. Aliases are ASCII identifiers; strings may carry Unicode and JSON escapes (`:1578–1590`).
|
||||
|
||||
`Parser::optional_id` allocates a fresh random UUID whenever the clause is absent (`language.rs:1226–1228`). `compile_bundle` inserts those IDs and recompiles the actual returned bytes before migration/indexing (`source_project.rs:286–300,660–675`). A plain `language::parse` returns a model but no stabilized source bundle. Lint is read-only and addresses raw bytes; accepting lint output does not preserve allocated identities. These distinctions matter to every external editor or AI client.
|
||||
|
||||
| Operation | Correct current source-only behavior | Failure or cognitive trap |
|
||||
| --- | --- | --- |
|
||||
| Create from empty input | Author a complete header and declarations with new IDs omitted; compile/import the bundle, adopt its returned stabilized files. | Repeatedly submitting the original missing-ID buffers creates new identities even if names and text look unchanged. |
|
||||
| Change a display name | Retain alias and UUID; edit the quoted name. | Recomputing the alias from that name changes references unnecessarily. Trace drift may properly require a later review. |
|
||||
| Rename an alias | Change its declaration and all live uses in one complete source candidate, or use the documented SetAlias command and retrieve updated source. The probe verifies both rejection and safe rewrite paths. | Editing only the header does not trigger automatic refactoring during parse. Blind text replacement can corrupt prose, comments and historical values. |
|
||||
| Reidentify | Use explicit identity-change commands when retaining original-record provenance is intended. | Raw replacement of a UUID is removal/creation correspondence, not an inferred rename. Same name or alias is insufficient to preserve history/comment ownership through identity swaps. |
|
||||
| Add one new declaration to an existing file | Keep established IDs; only new headers may omit them. | Reformatting the whole file without old IDs can replace the entire modeled graph. A safe client must retain the returned source after every accepted change. |
|
||||
| Reparent a nested element | Move the declaration into its new valid owner's body or to root, retaining IDs; remove/update an explicit parent if needed. Prepared Reparent performs that relocation with source trivia. | Lexical nesting and an explicit parent cannot disagree. Moving a work element must not silently alter allocation. |
|
||||
| Move a declaration between files | Retain IDs and semantic parent; update includes and supply all reachable files atomically. The probe verifies a root participant move. | An include does not create a namespace or implicit owner. Moving a nested declaration to a top-level fragment without an explicit parent changes its model meaning. |
|
||||
| Delete a referenced record | Supply a complete repaired candidate or use a typed command with the current deletion policy. | Raw source deletion does not automatically remove every dependent relationship or ordered reference. Structural rejection is correct; copying a GUI gesture's text deletion alone is insufficient. |
|
||||
| Work with incomplete input | Keep raw drafts in the external editor; lint without adopting them; submit a structurally valid complete bundle when ready. Explicit permitted holes warn. | Parser admission may stop at the first syntax/conversion error. Partial declaration indexing is not a partially accepted model or per-file transaction. |
|
||||
| Preserve review/history | Keep full accepted source plus semantic model snapshots; retain historical `uuid` forms exactly. | Replacing historical UUID observations with current alias lookup loses facts after deletion or reidentification. Server revision storage is not desktop Undo history. |
|
||||
|
||||
`update_bundle_with_identity_map` checks the old compiled index/model/bundle and requires valid correspondence before writing (`source_project.rs:780–849`). The updater retains omitted defaults, literal spelling, comments between `@` and alias, list-entry comments and CRLF/LF choices under defined ownership rules (`docs/language.rst:1812–1876`). Existing tests target identity swaps, nested cross-file moves, orphan comments, constructors and keyed lists (`tests/source_identity_updates.rs:37,81`; `tests/source_nested_updates.rs:49,77,244,345`; `tests/source_project.rs:900,966,1030,1097`). These are valuable obligations for a new grammar, not incidental old-editor behavior to discard.
|
||||
|
||||
### Genuine source-only access today
|
||||
|
||||
The REST service can import an authored complete SourceBundle through `POST /api/v1/projects/import-source-project`, retrieve it with `GET .../source-project`, and accept a conditional complete `PUT` (`docs/api.rst:85–99,164–204`; `oa-server/src/routes.rs:339,505,519`). A client can prepare ordinary text files, encode them as the documented `entry`/`files` JSON transport, import, read back stable files, edit, validate and submit using the returned ETag. JSON encoding of transport strings is not intended to be the engineer's modeling notation.
|
||||
|
||||
Candidate validation and typed command transactions are available without graphical controls (`docs/api.rst:115–120,288–302,445–464`). SetAlias/Reparent commands use the same admission and source updater. Transition and semantic-review query/preview/apply endpoints mean text-only clients need not hand-construct every counterpart baseline. The operation still requires an explicit command/decision; ordinary source does not contain executable transition instructions.
|
||||
|
||||
The service currently requires an existing project resource for candidate validation, so it is not a standalone offline compiler endpoint. It retains only the current revision, and writes require the captured ETag; a source-only client must retain draft and accepted snapshots itself (`docs/api.rst:13–49`). `/source` is canonical model interchange, whereas `/source-project` preserves authored text. Substituting the former can defeat a client's goal of retaining its files and comments.
|
||||
|
||||
The shipped desktop command-line entry has only `--write-example` before launching Iced (`oa-desktop/src/main.rs:36–48`). The server binary exposes service configuration, not check/stabilize/refactor commands (`oa-server/src/main.rs:31–78`). Core has useful filesystem loading/saving and pure APIs, but writing a custom Rust client is not a comfortable systems-engineer workflow. There is no inspected ordinary local language CLI or LSP route providing source-position definition/references/rename. Existing desktop `source_navigation.rs` is literal per-buffer search and line navigation; model-to-source selection and file-tree navigation are useful but different facilities.
|
||||
|
||||
## 5. Where noise is avoidable, and where explicitness carries meaning
|
||||
|
||||
The current source7 file authored above is already much smaller than generated release examples. Across the actual 30 `examples/release1` Arcadia files, the summed UTF-8 size is 78,414 bytes with 258 identity clauses, 357 empty-description occurrences, 34 `parent none` fields, 29 empty lists and 69 `none` tokens. These lexical counts include historical records; they do not prove that all matching text is redundant. The independent other-host audit in [Gitea #113](http://217.177.34.108:3000/sorokin.oleg.edu/ARCADIA-Studio/issues/1#issuecomment-113) reports the same 30 files/258 UUID clauses and complementary process/reuse counts. Neither corpus is a performance benchmark.
|
||||
|
||||
Four distinct problems should not be conflated:
|
||||
|
||||
1. **Default-heavy presentation.** Empty descriptions, root parent-none fields and ordinary defaults can often be omitted in authored declarations already. Current canonical export intentionally writes them, and graphical creation uses canonical declaration text. A minimal authoring writer could improve newly created material without changing semantics. It must compare against versioned parser defaults, preserve explicitly authored values and retain required historical observations.
|
||||
2. **Structural wrapper noise.** `body { Action { action @work; lifeline none; }; };`, `type_ref { Named @type; };` and Fragment/Branch/ScenarioUse records make engineers read metamodel serialization structure. These need a domain-focused surface syntax if an authoring trial finds the wrappers impair work. They are typed constructors today, not embedded arbitrary JSON, but their shape still reflects implementation records.
|
||||
3. **Repeated relationship authoring.** A sequence owner has a `steps` list and separate owned occurrences. Fragment/branch membership and reuse binding maps have related duplication. Some of this can be generated from one explicit authored block, but contribution order, precedence, containment, exchange occurrence and reuse identity must remain distinct. Simply interpreting all nested declarations as an execution order would change semantics.
|
||||
4. **Identity, history and modular context.** UUIDs, reviewed fact records and global aliases create cost that ordinary whitespace formatting cannot remove. Moving these facts elsewhere requires an exact portable representation and conflict rules; hiding them in a desktop cache would break the new text-only requirement.
|
||||
|
||||
The specification also has concrete inconsistencies, independently checked before any redesign:
|
||||
|
||||
| Finding | Evidence and current disposition |
|
||||
| --- | --- |
|
||||
| EBNF version is stale | `docs/language.rst:1599` says `arcadia 5`; its header and actual parser support current 7. The other host owns the correction in #116. |
|
||||
| Fresh-source viewpoint default is misleadingly documented as legacy-only | Catalog `:123` and scenario discussion `:631` frame omission as schema-2 hydration; `language.rs:1668–1671` sets MixedLegacy whenever the field is absent. The probe confirms fresh source7 behavior. #116 owns explicit guidance, with no semantic default change ratified. |
|
||||
| Constructor-required-field rule overstates current admission | `docs/language.rst:157–165,173–176` says supplied constructors require all fields and frames new message-field defaults as schema-2 exceptions. `model.rs:550–566` and the probe show fresh source7 accepts omitted Action.lifeline and Exchange.message_kind/reply_to while producing the same values. Root should reconcile the normative rule and actual supported defaults deliberately, preserving accepted source, rather than silently tighten the parser. |
|
||||
|
||||
This last inconsistency matters directly to authoring counts: a reader following the general specification may type more fields than the implementation needs. It also shows why a new syntax must have executable normative examples and versioned default rules instead of relying on implicit Serde behavior.
|
||||
|
||||
### Larger-model needs
|
||||
|
||||
All includes and nested declarations share one global alias namespace (`docs/language.rst:1692–1696,1759–1762`). There is no current package-level scope or import alias resolution. Engineers must invent globally unique labels such as `oa_left_controller_pressure` even when the file tree already communicates much of that context. Splitting a project into files reduces local display size; it does not provide scoped names, cross-file reference navigation or independently compilable semantic modules.
|
||||
|
||||
Core bundles allow 256 files, depth 32 and 1,024 include edges by default. Desktop policy permits 64 MiB/100,000 graph objects/250,000 records/500,000 ordered references; REST currently limits model/source-bundle JSON to 8 MiB and 5,000 graph objects/20,000 records/50,000 ordered references (`oa-desktop/src/source_workspace.rs:9–18`; `docs/api.rst:137–153`). These different capacity policies must be visible in a large-model workflow. A model that opens locally may not fit the hosted service. Neither raising the cap nor claiming core has an unlimited parse entry establishes responsive editing.
|
||||
|
||||
SysML 2.0 distinguishes namespaces, owned/non-owned memberships, imports and qualified names rather than equating a physical file with semantic scope. That is a useful candidate vocabulary for Studio's unresolved naming design; importing the entire SysML metamodel is not required by this evidence. [OMG SysML 2.0, §7.5 and §8.2.2.5](https://www.omg.org/spec/SysML/2.0/Language/PDF)
|
||||
|
||||
A Studio namespace choice must define whether scope is a model record or an authoring-only name environment; how it relates to current globally stored aliases; how moving a declaration affects references; what happens on local/imported name collision; and how GUI/REST display and rename the same identity. Secretly encoding qualified source names into generated global aliases would merely move the mismatch unless both representations and their mapping are specified.
|
||||
|
||||
## 6. Materially different candidates
|
||||
|
||||
Ratings are provisional judgments, not user-test measurements. Low implementation cost alone cannot win against the user's full authoring requirement.
|
||||
|
||||
| Candidate | Small-model effort | Large-model context | Identity/comment/history continuity | Main failure mode | Provisional treatment |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| A. Current grammar with an authoring writer, source CLI and semantic navigation/refactoring | Removes generated defaults; allows ordinary editors to check, stabilize and rename safely. Existing short declarations remain. | Better tools and file navigation, but still global aliases and constructor/list burden. | Strongest reuse of current invariants and updater. | Mistaking tooling and hidden/folded UUIDs for a sufficiently clear language. | Useful baseline and immediate vertical infrastructure; insufficient alone if the measured wrapper/context burden persists. |
|
||||
| B. Domain-specific syntax over the same authoritative model, with an explicit CST-to-model mapping | Can replace constructor wrappers and duplicated membership with coherent domain statements/blocks. | Reuse syntax and selective qualified references can improve context, but namespace policy still requires a decision. | Existing UUIDs and model commands remain; updater must preserve the chosen syntax and each generated record's stable identity. | Sugar becomes a one-way macro that canonicalizes after GUI edits or recreates hidden occurrence/link IDs. | Leading bounded experiment, paired with A's real source-only tools. Must lose if lossless bidirectional mapping is too fragile. |
|
||||
| C. Redesigned declarative grammar with explicit semantic namespaces and integrated domain notation | Potentially most coherent whole-model authoring rather than accumulated keywords. | Can supply real local/imported naming and domain modules. | Highest migration cost; must map every accepted record, historical fact, source comment and ID, and preserve raw invalid drafts with their original language context. | Large new language designed before identity, library and analysis semantics are settled; coercing current ownership into namespace ownership. | Serious competitor for the full end state; require one complete alternative model and adversarial migration prototype before selection. |
|
||||
| D. Separate engineering text from explicit portable identity/layout/history management modules | The ordinary model file can become much cleaner. | Management data can be localized, but cross-file consistency and conflict review become essential. | Possible only if all modules are version-controlled, portable, typed and atomically admitted; no ambient cache or hidden database authority. | Renaming/moving text breaks sidecar identity, Git conflicts silently remap records, or text-only users must manually rebuild baselines. | Evaluate independently from surface grammar. Could complement B/C, but does not get assumed merely because the sample looks cleaner. |
|
||||
|
||||
A and B are materially different: A changes authoring tools and generated output without new syntax; B changes where an engineer states semantic facts and therefore requires a new lossless parser/updater mapping. C changes the overall naming/declaration model. D changes the location and authority of persistent identity/history metadata. Combining selected parts must be justified by the same complete workflow, not by accumulating every feature.
|
||||
|
||||
### Identity alternatives that must be tested explicitly
|
||||
|
||||
| Identity mechanism | Benefit | Non-negotiable problem to solve |
|
||||
| --- | --- | --- |
|
||||
| Current inline UUID clauses | Self-contained and stable through rename/move; exact existing model/API compatibility. | Visually long; initial missing-ID buffers must be replaced by stabilized output. Folding cannot be the sole means of understanding ordinary text. |
|
||||
| Short stable authoring anchors with an explicit UUID map | References and headers can be shorter while public model UUIDs survive. | Define map authority, duplicate/absent anchors, merge conflicts, copy/fork, reidentify and baseline references. Anchor allocation cannot depend on current file position or display name. |
|
||||
| Separate identity management module keyed by a stable declared anchor | Keeps normal engineering declarations compact and portable metadata explicit. | Ordinary rename/move must keep the anchor/map coherent without invisible GUI state; partial commits and hand edits need precise diagnostics. An alias-only map is not rename-stable. |
|
||||
| IDs derived from names, file paths, AST positions or full content | Looks convenient for a fresh example. | Routine rename/move/edit changes identity and destroys required continuity. Reject as the durable identity mechanism unless an independent stable anchor is introduced, which returns to another candidate. |
|
||||
|
||||
None of the alternatives may reinterpret historical UUID observations as live aliases. A management module also cannot store only a hash of a required old baseline if the actual old facts are needed for review or library updates. Exact data and corresponding source must travel in the portable model envelope.
|
||||
|
||||
## 7. Preferred experiment and its falsifiers
|
||||
|
||||
Trial B against A and one representative C/D form, retaining current UUID identity and the current model for the first prototype. Keep parser language version and semantic schema version conceptually distinct: a syntax-only form need not pretend that its mathematical or Arcadia semantics changed. The repository currently couples them through `Project.schema_version`; separating them is itself a public-format decision, not an implementation shortcut.
|
||||
|
||||
Current bundle migration already stabilizes missing IDs first, then upgrades valid older source using targeted token changes, preserving file placement, nesting and comments (`source_project.rs:286–300`; `source_project/source_migration.rs:4–105`). Earlier readers explicitly reject later fields rather than silently absorbing new semantics. A new grammar must retain frozen source7 interpretation, including its actual default behavior, and provide an explicit migration report and reviewable diff for accepted documents. Invalid raw drafts cannot be semantically migrated as if they were valid ASTs: retain their exact bytes and original language context beside the accepted snapshot. Desktop recovery already distinguishes clean accepted buffers from dirty/unapplied ones (`oa-desktop/src/source_workspace.rs:34–48`). A successful accepted-source migration must not erase such a draft, rewrite a historical observation into a live reference, or regenerate occurrence identities from new syntax order.
|
||||
|
||||
For example, a **proposed, currently invalid** process authoring block could be:
|
||||
|
||||
```text
|
||||
oa_process triage "Alarm triage" id "...existing process UUID..." {
|
||||
contributions {
|
||||
action detect_once "Detect this alarm" id "...existing occurrence UUID..." do @detect_alarm;
|
||||
action assess_once "Assess this alarm" id "...existing occurrence UUID..." do @assess_alarm;
|
||||
}
|
||||
}
|
||||
sequence_link assessment_after_detection "Assess after detecting" id "...existing link UUID..." {
|
||||
source @detect_once; target @assess_once;
|
||||
}
|
||||
```
|
||||
|
||||
This spelling is not a promise of a finished grammar. In the candidate, each `action` explicitly owns one ordinary Action occurrence with the displayed identity and derives the process's ordered `steps` membership from block order. The existing SequenceLink remains explicit: contribution order is not an invented execution edge. The block cannot coexist with a conflicting `steps` field; it cannot absorb independently owned callee contributions, silently create a reuse clone, or allocate fresh IDs on every parse. The three UUID placeholders deliberately expose the unresolved real header cost; they must be replaced by actual accepted IDs in a measured prototype.
|
||||
|
||||
A message/fragment/reuse form needs similarly explicit ownership, occurrence identity, viewpoint and bindings. A blanket `send A -> B` shortcut is inadequate if it conflates work exchanges, participant boundaries, operation allocations, receiver lifelines and repeated occurrences. A data-field shorthand needs exact optionality/multiplicity/type/default semantics. A state-transition shorthand must preserve trigger alternatives, local/internal/external kind, typed work effects and descriptive text. These are required next representatives, not assumed consequences of implementing `contributions`.
|
||||
|
||||
Required implementation laws for any selected form:
|
||||
|
||||
- Parsing and lowering produce the same complete Project as the explicit current form, including all IDs, list order, views, artifacts and historical facts.
|
||||
- Missing identities normalize once into the accepted portable source. Repeated admission is inert. All generated persistent records have explicit stable source identity; position-based IDs or unrecorded macro expansions fail.
|
||||
- GUI/REST edits update the original selected notation, preserving unaffected token bytes and comments. A parser that can import the new form but an updater that rewrites it into canonical source7 fails bidirectionality.
|
||||
- Source locations identify the actual authoring token responsible for each lowered property/reference. There are no synthetic error spans into an invisible expansion.
|
||||
- A reference edit can preserve comments and historical facts even when two model records share a source construct. Constructor changes, reorder, nested move, UUID swap, delete/reuse and removal of an optional field have specified trivia ownership.
|
||||
- A full accepted source bundle and model share one atomic admission/history/revision boundary. Invalid drafts remain drafts. Applying a semantic command cannot silently resolve an unrelated source draft.
|
||||
|
||||
The main falsifiers are concrete: two repeated uses of one work item receive the same occurrence identity; moving a nested declaration changes its performer; reordering a contribution block invents SequenceLinks; GUI Rename destroys the authored short syntax or comments; changing a file alias remaps historical facts; or a source-only update requires opening a GUI form. Any one invalidates that candidate until its representation changes.
|
||||
|
||||
## 8. Minimum vertical slice and full end-state obligations
|
||||
|
||||
The first coherent production slice should make **one complete OA/SA model developable and maintainable through ordinary text tools**, while establishing reusable lossless language infrastructure. It should not consist only of a new keyword.
|
||||
|
||||
1. Publish an exact source-only check/stabilize/refactor path. A local CLI over existing core/source-files APIs is the strongest initial candidate: read an explicit root file, diagnose raw bytes, write accepted stabilization only on request, preserve external-change detection, and expose explicit semantic alias rename/reparent with a reviewable file diff. Reuse the same protocol in an editor/LSP adapter later; do not make a network service mandatory for local modeling.
|
||||
2. Reconcile the proven current version/default documentation inconsistencies with executable fixtures. Respect the other host's ownership of EBNF/MixedLegacy corrections. Specify constructor omissions by version and keep existing accepted source meaningful.
|
||||
3. Implement one lossless domain-syntax representative only after the comparison: operational process/SA chain contributions plus their ordering and existing explicit relationships, with the complete alarm model retained. Extend the syntax-to-model location/update mechanism so a later scenario/data/analysis form does not require another ad hoc text-rewrite subsystem.
|
||||
4. Drive initial creation, display-name and alias rename, reparent, duplicate-name reference selection, file split/move, raw invalid edit and repair, counterpart review and an ordinary graphical edit through that same model. Preserve full models and exact unrelated source bytes; use API ETags and desktop accepted history where appropriate. A text-only engineer must not need to manufacture private Rust enums or edit GUI-only metadata.
|
||||
5. Compare the real initial **and stabilized** A/B/C/D texts, including all identity/history management modules. Measure completion and error recovery on the small model and on a generated large model with repeated local names, nested reuse, multiple files and 5,000 graph objects under the service cap. Also characterize the desktop's larger declared policy separately; do not extrapolate service measurements to 100,000 objects.
|
||||
|
||||
For that comparison record source bytes, required fact entry, edited lines for a one-record change, wrong-reference/ownership/order errors, completion time, diagnostic locality and measured parse/lint/apply latency. Include an engineer and an independent AI client working only from the published contract. Count total portable source, not just the pretty primary file. Establish hardware and practical latency thresholds before judging outcomes; no performance number is supplied by this report.
|
||||
|
||||
The broader release still requires a coherent notation for every current family in section 3 plus the selected calculation/quantity/library semantics, a deliberate naming/namespace decision for large models, practical source navigation/refactoring and accurate reST/API contracts. It must carry exact library pins and update bases, support real calculation results and formal constraints, and preserve graphic/text/API equivalence. Intermediate compatibility forms can be retained when explicit, but an unbounded collection of implementation-shaped escape hatches cannot stand in for the requested usable text-only language.
|
||||
|
||||
Root should record the candidate comparison, selected identity/default/namespace policies and migration obligations before major parser work. The current evidence justifies a complete source-only workflow and a focused bidirectional syntax experiment; it does not yet justify a wholesale rewrite, a hidden sidecar, or a claim that current source7 already meets the new usability end state.
|
||||
Reference in New Issue
Block a user