-
Build the project to get the executable file.
stack build --copy-bins -
Demo search file is "./demoExamples/search/demo.txt"
If we would like to query conclusionp1using the priority ordering function that is the composition ofweakest-linkandelithen:DT-exe ./demoExamples/search/demo.txt p1 weakest-eliThe query result includes 9 paths, each path represents a argument that related to the query conclusion (direct/indirect support/defend).
Priority functions include
weakest-eli,weakest-dem,last-eli,last-dem. The default isweakest-eli.[[r6: p6 p7->p1],[r7: p8=>p6,r8: p9=>p7],[r9: p10=>p8,r10: p11=>p9],[r11: ->p10,r12: ->p11]] [[r69: p54 p55->!p7],[r70: p56=>p54,r71: p57=>p55],[r72: ->p56,r73: ->p57]] [[r79: p60 p61->!r71],[r80: p62=>p60,r81: p63=>p61],[r82: ->p62,r83: ->p63]] [[r91: p69 p70->!p61],[r92: p71=>p69,r93: p72=>p70],[r94: ->p71,r95: ->p72]] [[r99: =>!r93]] [[r91: p69 p70->!p61],[r92: p71=>p69,r96: p73=>p70],[r94: ->p71,r97: p74=>p73],[r98: ->p74]] [[r100: =>!r97]] [[r69: p54 p55->!p7],[r70: p56=>p54,r74: p58=>p55],[r72: ->p56,r76: p59=>p58],[r78: ->p59]] [[r87: p66->!r74],[r88: p67=>p66],[r89: p68=>p67],[r90: ->p68]]Note:
- B1_1, B1_2 are equifinal paths, they all conclude
!p7.- So the same with C1_1, C1_2 and D1_1 , D1_2.
- Divergence of equifinal paths are blue.
- Equifinal paths are ordered by the maximum depth from it's conclusion to facts.
- One of even-layer Equifinal Paths is successfully defended is enough. This is why
C1_2is not in the query result. - Equifinal Path of odd layer must all be defeaded and included in the query result.
- Equifinal Path of odder layer that attack but cannot defeat previous layer argument successfully will not be included in the query result, this is why
D2is not in the query result. - This default search relies on (weakest-link + dem) ordering.
- D2 can not defeat C2 successfully, so that all attacker of A1 can be defeated, thus A1 can be defended indirectly.
Changing the preference value of the defeasible rule in D2 from 0 to 1, then D2 defeat C2 and defended B1_2 indirectly. So that B1_2 defeated A1, the query result will be empty.
- B1_1, B1_2 are equifinal paths, they all conclude
-
Different Ordering function could lead to different query result: In this case
weakest-link+demwould provide no query result because the query path is defeated.
> DT-exe ./demoExamples/ordering/demo2-dem.txt p1 weakest-dem
>
> DT-exe ./demoExamples/ordering/demo2-dem.txt p1 weakest-eli
[[r1: p2 p3->p1],[r2: p4 p5->p2,r3: p6 p7->p3],[r4: =>p4,r5: =>p5,r6: =>p6,r7: =>p7]]
The file format is as shown below. Each demo file is equivalent to a set of paths.

Notes, subpath that being attacked will not be shown in this. For example. sub path of p2 in path p1 is being attacked by path of !p2, it will not be drew independently.
Env Contains context information of computing for computing the query result:
data Env = Env
{ envLangSpace :: Language -- 1
, envSRuleSpace :: StrictRules -- 2
, envDRuleSpace :: DefeasibleRules -- 3
, envArguSpace :: ArgumentationSpace -- 4
, envRdPrefMap:: RdPrefMap -- 5
, envKnwlPrefMap :: KnwlPrefMap -- 6
}
- Language Space
L. - Strict Rules
S. - Defeasible Rules
D. - Reserved for future use.
- Predefined Preference Ordering of defeasible rules
$\leq_d$ . - Predefined Preference Ordering of premises
$\leq_o$ .
Each rule and premise is associated with an integer. The priority orderings relation is equivalent to the ordering of the associated integer.
stack ghci
-
Read context information from file
env1 <- parseEnv "./demoExamples/ordering/demo1.txt"env1contains all context information of this argumentation system,L: LanguageSpace,R: Strict Rules + Defeasible Rules,Priority Orderings: Preference Map .> env1 LanguageSpace: [!p2,p1,p10,p11,p2,p3,p4,p5,p6,p7,p8,p9,r10: p11=>p9,r1: p2 p3=>p1,r11: =>p10,r8: p8 p9=>!p2,r7: =>p7,r6: =>p6,r4: =>p4,r3: p6 p7=>p3,r12: =>p11,r2: p4 p5=>p2,r9: p10=>p8,r5: =>p5] Strict Rules: [] Defeasible Rules: [r10: p11=>p9,r1: p2 p3=>p1,r11: =>p10,r8: p8 p9=>!p2,r7: =>p7,r6: =>p6,r4: =>p4,r3: p6 p7=>p3,r12: =>p11,r2: p4 p5=>p2,r9: p10=>p8,r5: =>p5] ArgumentationSpace: [] Preference Map of defeasible rules: fromList [("r10",1),("r1",1),("r8",2),("r3",1),("r2",1),("r9",1)] Preference Map of axiom and ordinary knowledge: fromList [("r11",1),("r7",2),("r6",2),("r4",2),("r12",2),("r5",2)] -
Prepare application runner with context
env1. So that we could use this runner to run context related functions.run1 = runApp env1 -
Get literals the represents the query proposition
p1.lMap = parseLiteralMap env1 l1 = parseQueryLiteral "p1" lMapl1is of typeLiteral.> l1 p1 > :info l1 l1 :: Literal -
Get
EFPthat concludes "p1".efp1 <- run1 $ querySingleConclusion l1Now we have the
EFPthat concludes our query propositionp1.> efp1 [[[r1: p2 p3=>p1],[r2: p4 p5=>p2,r3: p6 p7=>p3],[r4: =>p4,r5: =>p5,r6: =>p6,r7: =>p7]]] -
Check if Paths in
$EFP_{p1}$ is attacked by any other$EFP$ .> r <- run1 $ rebutDemo' (head efp1) > r [(p2,[[[r8: p8 p9=>!p2],[r9: p10=>p8,r10: p11=>p9],[r11: =>p10,r12: =>p11]]])]The output indicates
$PAth_{!p2}$ =[[r8: p8 p9=>!p2],[r9: p10=>p8,r10: p11=>p9],[r11: =>p10,r12: =>p11]], it attacks the only path in$EFP_{p1}$ at$p2$ .head efp1gets the only path in$EFP_{p1}$ .rebutDemo'is auxiliary function defined in moduleUtility.DemoHelp. -
Note: There is only one path in each
$EFP$ in all ordering demos. So, I will use$path_{p1} = Path_{p1}$ to represent$EFP_{p1}$ ,$path_{np2} = Path_{!p2}$ to represent$EFP_{!p2}$ and so on.p2 = fst . head $ r path_np2 = head . snd . head $ r path_p2 <- fmap head $ run1 $ querySingleConclusion p2
- Start testing Ordering Function on
$path_{np2}$ and$path_{p2}$ .last-linkselects the last-defeasible rules, in this caser8from$path_np2$ andr2from$path_p2$ .In this case,> run1 $ lastDem path_np2 path_p2 True > run1 $ lastEli path_np2 path_p2 Trueweakest-linkselect all defeasible rules and ordinary premise and compute the preference orderings respectively.Elirequires all component of$path_{np2}$ no less preferred than same type of components of$path_{p2}$ .> run1 $ weakestDem path_np2 path_p2 True > run1 $ weakestEli path_np2 path_p2 False - This section focus on illustrating the ordering function. Function
orderingHelperintegrated above processes and return the path that attacks our query and the subpath being attacked of our query.> runner = getRunner "./demoExamples/ordering/demo1.txt" > (attacker,target) <- orderingHelper "./demoExamples/ordering/demo1.txt" "p1" > attacker [[r8: p8 p9=>!p2],[r9: p10=>p8,r10: p11=>p9],[r11: =>p10,r12: =>p11]] > target [[r2: p4 p5=>p2],[r4: =>p4,r5: =>p5]] > runner $ weakestEli attacker target False
stack ghci
- Get runner of demo2-dem
> runner = getRunner "./demoExamples/ordering/demo2-dem.txt"
-
$Path_{p1}$ is rebutted on$p4$ .
> (attacker,target) <- orderingHelper "./demoExamples/ordering/demo2-dem.txt" "p1"
> attacker
[[r8: p8 p9->!p4],[r9: p10->p8,r10: p11->p9],[r11: =>p10,r12: =>p11]]
> target
[[r4: =>p4]]
> runner $ weakestEli attacker target
False
> runner $ weakestDem attacker target
True
weakest method selects all defeasible components (rules and ordinary premises). If B attacks A and B & A are all strict, the only possible scenario is A is an ordinary premise.In this demo, weakest and last will select the same set of defeasible components.
- Get a runner of modified demo2.
runner = getRunner "./demoExamples/ordering/demo2-eli.txt"
- The change of irrelevant preference will not affect the result.
> (attacker, target) <- orderingHelper "./demoExamples/ordering/demo2-eli.txt" "p1"
> runner $ weakestEli attacker target
True
> runner $ weakestDem attacker target
True
weakest method still return same set of defeasible components. In this modified example, the preference of weakestEli and weakestDem will return True.
- Get a runner of demo3.
> runner = getRunner "./demoExamples/ordering/demo3-dem.txt"
- In this demo,
weakest-linkandlast-linkwill select same set of defeasible components.
> (attacker, target) <- orderingHelper "./demoExamples/ordering/demo3-dem.txt" "p1"
> runner $ weakestDem attacker target
True
> runner $ weakestEli attacker target
False
- Get a runner of modified demo3.
> runner = getRunner "./demoExamples/ordering/demo3-eli.txt"
- In this demo,
weakest-linkandlast-linkwill select same set of defeasible components. Irrelevant component will not affect the computation. Because the preference of$r9$ changed from 1 to 2, bothEliandDemwill beTrue.
> (attacker, target) <- orderingHelper "./demoExamples/ordering/demo3-eli.txt" "p1"
> runner $ weakestDem attacker target
True
> runner $ weakestEli attacker target
True
- Get a runner of demo4.
> runner = getRunner "./demoExamples/ordering/demo4-dem.txt"
(attack, target) <- orderingHelper "./demoExamples/ordering/demo4-dem.txt" "p9"
> runner $ lastEli attack target
False
> runner $ lastDem attack target
True
> runner $ weakestEli attack target
False
> runner $ weakestDem attack target
False
(attack, target) <- orderingHelper "./demoExamples/ordering/demo4-dem.txt" "p21"
> runner $ lastDem attack target
True
> runner $ lastEli attack target
False
> runner $ weakestDem attack target
True
> runner $ weakestEli attack target
False
- Get a runner of modified demo4.
> runner = getRunner "./demoExamples/ordering/demo4-eli.txt"
(attack, target) <- orderingHelper "./demoExamples/ordering/demo4-eli.txt" "p9"
> runner $ lastDem attack target
True
> runner $ lastEli attack target
True
> runner $ weakestDem attack target
True
> runner $ weakestEli attack target
False
(attack, target) <- orderingHelper "./demoExamples/ordering/demo4-eli.txt" "p21"
> runner $ lastDem attack target
True
> runner $ lastEli attack target
True
> runner $ weakestDem attack target
True
> runner $ weakestEli attack target
True
heuristic information When there is no information about attacker and target. The chance of a successful attack is decreasing: weakest + dem most promising to attack success last + dem last + eli weakest + eli most promising to attack fail
actual solution goes in parallel: need to update to a parallel version.








