public ExampleSpec WitnessFlipComparisonSymbol(GrammarRule rule, ExampleSpec spec) { var examples = new Dictionary <State, object>(); foreach (var input in spec.ProvidedInputs) { var before = (Node)input[rule.Body[0]]; var after = (Node)spec.Examples[input]; var flippable = new List <string>() { "<", ">", "<=", ">=" }; foreach (var symbol in flippable) { if (Semantics.FlipComparison(before, symbol, true).IsEqualTo(after)) { examples[input] = symbol; } } } return(new ExampleSpec(examples)); }
public DisjunctiveExamplesSpec WitnessFilterByProcessProcess(GrammarRule rule, ExampleSpec spec) { var examples = new Dictionary <State, IEnumerable <object> >(); foreach (var input in spec.ProvidedInputs) { var before = (Node)input[rule.Body[0]]; var after = (List <int>)spec.Examples[input]; var children = before.GetProcesses(); foreach (var child in children) { if (Semantics.FilterByProcess(before, child).OrderBy(i => i) .SequenceEqual(after.OrderBy(i => i))) { if (!examples.ContainsKey(input)) { examples[input] = new List <string>(); } ((List <string>)examples[input]).Add(child); } } } return(new DisjunctiveExamplesSpec(examples)); }
public ExampleSpec WitnessIndexFromBackIndex(GrammarRule rule, ExampleSpec spec) { var examples = new Dictionary <State, object>(); foreach (var input in spec.ProvidedInputs) { var before = (Node)input[rule.Body[0]]; var after = (int)spec.Examples[input]; for (var i = 0; i < before.Children.Count; ++i) { if (Semantics.IndexFromBack(before, i) == after) { examples[input] = i; } } } return(new ExampleSpec(examples)); }
public ExampleSpec WitnessIndexByNameName(GrammarRule rule, ExampleSpec spec) { var examples = new Dictionary <State, object>(); foreach (var input in spec.ProvidedInputs) { var before = (Node)input[rule.Body[0]]; var after = (int)spec.Examples[input]; var children = before.GetIdentifiers(); foreach (var child in children) { if (Semantics.IndexByName(before, child) == after) { examples[input] = child; } } } return(new ExampleSpec(examples)); }
public DisjunctiveExamplesSpec WitnessMoveLeft(GrammarRule rule, ExampleSpec spec, ExampleSpec positionSpec) { var examples = new Dictionary <State, IEnumerable <object> >(); foreach (var input in spec.Examples) { var inputState = input.Key; var before = (Node)inputState[rule.Body[0]]; var position = (int)positionSpec.Examples[inputState]; var after = (Node)spec.Examples[inputState]; if (Semantics.Move(before, position, true).IsEqualTo(after)) { if (!examples.ContainsKey(inputState)) { examples[inputState] = new List <object>(); } if (!(examples[inputState]).Contains(true)) { ((List <object>)examples[inputState]).Add(true); } } if (Semantics.Move(before, position, false).IsEqualTo(after)) { if (!examples.ContainsKey(inputState)) { examples[inputState] = new List <object>(); } if (!(examples[inputState]).Contains(false)) { ((List <object>)examples[inputState]).Add(false); } } } return(new DisjunctiveExamplesSpec(examples)); }
public DisjunctiveExamplesSpec WitnessFlipByProcessProcess(GrammarRule rule, ExampleSpec spec) { var examples = new Dictionary <State, IEnumerable <object> >(); foreach (var input in spec.ProvidedInputs) { var before = (Node)input[rule.Body[0]]; var after = (bool)spec.Examples[input]; var flippable = new List <string>() { "<", ">", "<=", ">=" }; var children = before.GetProcesses(); foreach (var symbol in flippable) { foreach (var child in children) { if (Semantics.FlipByProcess(before, child) == after) { if (!examples.ContainsKey(input)) { examples[input] = new List <object>(); } ((List <object>)examples[input]).Add(child); } } } } return(new DisjunctiveExamplesSpec(examples)); }
public ExampleSpec WitnessToImpLeftSide(GrammarRule rule, ExampleSpec spec) { var examples = new Dictionary <State, object>(); foreach (var input in spec.ProvidedInputs) { var before = (Node)input[rule.Body[0]]; var after = (Node)spec.Examples[input]; var children = before.Children; var numLeftSide = after.Type == Z3_decl_kind.Z3_OP_AND ? after.Children.Count : after.Children[0].Type == Z3_decl_kind.Z3_OP_AND ? after.Children[0].Children.Count : 1; var listOfIndices = Enumerable.Range(0, children.Count); var possibleLists = Utils.GetKCombs(listOfIndices, numLeftSide); foreach (var sub in possibleLists) { var subList = sub.ToList(); if (Semantics.ToImp(before, subList).IsEqualTo(after)) { examples[input] = subList; } } } return(new ExampleSpec(examples)); }
public ExampleSpec WitnessMovePosition(GrammarRule rule, ExampleSpec spec) { var examples = new Dictionary <State, object>(); foreach (var input in spec.ProvidedInputs) { var before = (Node)input[rule.Body[0]]; var after = (Node)spec.Examples[input]; for (var i = 0; i < after.Children.Count; ++i) { if (Semantics.Move(before, i, true).IsEqualTo(after)) { examples[input] = i; } if (Semantics.Move(before, i, false).IsEqualTo(after)) { examples[input] = i; } } } return(new ExampleSpec(examples)); }
public DisjunctiveExamplesSpec WitnessFilterStaticType(GrammarRule rule, ExampleSpec spec) { var examples = new Dictionary <State, IEnumerable <object> >(); foreach (var input in spec.ProvidedInputs) { var before = (Node)input[rule.Body[0]]; var after = (List <int>)spec.Examples[input]; foreach (StaticFilterType type in Enum.GetValues(typeof(StaticFilterType))) { if (Semantics.FilterStatic(before, type).OrderBy(i => i) .SequenceEqual(after.OrderBy(i => i))) { if (!examples.ContainsKey(input)) { examples[input] = new List <object>(); } ((List <object>)examples[input]).Add(type); } } } return(new DisjunctiveExamplesSpec(examples)); }