Invariant
This commit is contained in:
@ -34,8 +34,7 @@ pub fn confluent(
|
|||||||
// FIXME we take just the first? do we compare all?
|
// FIXME we take just the first? do we compare all?
|
||||||
let (prefix_len, new_hoop) = all_loops.first()?;
|
let (prefix_len, new_hoop) = all_loops.first()?;
|
||||||
|
|
||||||
if new_hoop.len() != dimension
|
if new_hoop.len() != dimension || !hoop.contains(new_hoop.first()?) {
|
||||||
|| !hoop.contains(new_hoop.first().unwrap()) {
|
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
max_distance = cmp::max(max_distance, *prefix_len);
|
max_distance = cmp::max(max_distance, *prefix_len);
|
||||||
@ -67,11 +66,40 @@ pub fn confluent_named(
|
|||||||
available_entities,
|
available_entities,
|
||||||
symb)?;
|
symb)?;
|
||||||
|
|
||||||
if new_hoop.len() != dimension
|
if new_hoop.len() != dimension || !hoop.contains(new_hoop.first()?) {
|
||||||
|| !hoop.contains(new_hoop.first().unwrap()) {
|
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
max_distance = cmp::max(max_distance, prefix_len);
|
max_distance = cmp::max(max_distance, prefix_len);
|
||||||
}
|
}
|
||||||
Some((max_distance, dimension, hoop))
|
Some((max_distance, dimension, hoop))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
pub fn invariant_named(
|
||||||
|
delta: &RSenvironment,
|
||||||
|
reaction_rules: &[RSreaction],
|
||||||
|
entities: &[RSset],
|
||||||
|
symb: IdType
|
||||||
|
) -> Option<(Vec<RSset>, Vec<RSset>)> {
|
||||||
|
let (prefix, hoop) = lollipops_decomposed_named(delta,
|
||||||
|
reaction_rules,
|
||||||
|
entities.first()?,
|
||||||
|
symb)?;
|
||||||
|
let mut invariant = vec![];
|
||||||
|
invariant.append(&mut prefix.clone());
|
||||||
|
invariant.append(&mut hoop.clone());
|
||||||
|
let dimension = hoop.len();
|
||||||
|
|
||||||
|
for available_entities in entities {
|
||||||
|
let (new_prefix, new_hoop) = lollipops_decomposed_named(delta,
|
||||||
|
reaction_rules,
|
||||||
|
available_entities,
|
||||||
|
symb)?;
|
||||||
|
if new_hoop.len() != dimension || !hoop.contains(new_hoop.first()?) {
|
||||||
|
return None
|
||||||
|
}
|
||||||
|
invariant.append(&mut new_prefix.clone());
|
||||||
|
}
|
||||||
|
Some((invariant, hoop))
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user