# Scenarios for Merging Proofs

This page is a first tentative to describe the scenario that a merge tool will have to face.

## Contents

## Proof structure

With respect to the merging objective, a proof is made of:

- a component name,
- a unique identifier inside that component, which is same as the PO identifier,
- a proof tree, either manual or automatic,
- a proof status (PO discharged or not by the proof tree, in fact implemented with a
*confidence*value: 1000 => proved, 500 => review, <500 => unproved) - a PO sequent

## Rodin database implementation

Each component- a file, which contains the proof trees associated with each PO (1/, 2/ and 3/ before).
`compname.bpr` - a file, which contains the proof status associated with each PO (2/, 5/ and 3/ - discharged or not, manual or automatic)
`compname.bps` - a file, which contains the PO (1/ and 2/ + PO content).
`compname.bpo`

## Proof reuse

Rodin is able, actually with a bit of work, to provide a *reuse* mechanism. This mechanism would allow to check, without replaying, that a proof tree will cleanly discharge a PO.

`.bps`

`.bpo`

`.bpr`

`.bpo`

## Merging scenarios

PO being uniquely identified, it may be enough to consider a merge taking place PO by PO.

In the following we call *L* the *local* database/user/branch, *O* the *other* database/user/branch and *A* the database which reflects the common state from which *L* and *O* have departed (A standing for ancestor). We also consider *L* and *O* as being symmetrical (and thus we won't describe symmetrical scenarios).

### Simple scenarios (need database evolution)

While discussing about the merge topic, it appears that another wanted and related feature is multi-proof database, where the`compname.bpr`

*main proof*), but also all the proof trees that were once used to prove the PO (the set of those proof trees is called

*proof history*).

Once both *multi-proof database* and *proof reuse* are implemented, the merge process for the proofs may be the following one:

- merge the model (machines and context)
- build new
*proof history*as the union of*proof histories*from*O*and*L' plus, say*L - build the
*main proof*with the*O main proof*

Those steps do not need user interacions.

The person doing the merge may then review the proofs that do not replay, and see if one of the history proof tree may help (steps which may also be automated with the help of *proof reuse* feature).

### Complicated scenarios

## User interactions

In the context of simple scenarios, no user interactions is requested from user.

The only interaction envisioned is done after the merge, and is related to digging into proof history

## VCS interactions

With respect to the action of merging the proof, the only interaction with VCS, is the ability to retrieve*local*,

*other*and

*ancestors*

`.bpr`

It is a very common requirement, which is certainly fulfilled by every descent VCS.