argumentation_schemes/catalog/
epistemic.rs1use crate::catalog::EPISTEMIC_ID_OFFSET;
6use crate::critical::CriticalQuestion;
7use crate::scheme::*;
8use crate::types::*;
9
10pub fn all() -> Vec<SchemeSpec> {
12 vec![
13 argument_from_expert_opinion(),
14 argument_from_witness_testimony(),
15 argument_from_position_to_know(),
16 ]
17}
18
19pub fn argument_from_expert_opinion() -> SchemeSpec {
24 SchemeSpec {
25 id: SchemeId(EPISTEMIC_ID_OFFSET),
26 name: "Argument from Expert Opinion".into(),
27 category: SchemeCategory::Epistemic,
28 premises: vec![
29 PremiseSlot::new(
30 "expert",
31 "Source E is an expert in subject domain D",
32 SlotRole::Agent,
33 ),
34 PremiseSlot::new(
35 "domain",
36 "The field of expertise containing the claim",
37 SlotRole::Domain,
38 ),
39 PremiseSlot::new("claim", "The proposition E asserts", SlotRole::Proposition),
40 ],
41 conclusion: ConclusionTemplate::positive(
42 "?claim may plausibly be taken to be true",
43 "?claim",
44 ),
45 critical_questions: vec![
46 CriticalQuestion::new(
47 1,
48 "How credible is ?expert as an expert source?",
49 Challenge::SourceCredibility,
50 ),
51 CriticalQuestion::new(
52 2,
53 "Is ?expert an expert in the field that ?claim is in?",
54 Challenge::PremiseTruth("domain".into()),
55 ),
56 CriticalQuestion::new(
57 3,
58 "What did ?expert assert that implies ?claim?",
59 Challenge::PremiseTruth("claim".into()),
60 ),
61 CriticalQuestion::new(
62 4,
63 "Is ?expert personally reliable as a source?",
64 Challenge::SourceCredibility,
65 ),
66 CriticalQuestion::new(
67 5,
68 "Is ?claim consistent with what other experts assert?",
69 Challenge::ConflictingAuthority,
70 ),
71 CriticalQuestion::new(
72 6,
73 "Is ?expert's assertion based on evidence?",
74 Challenge::RuleValidity,
75 ),
76 ],
77 metadata: SchemeMetadata {
78 citation: "Walton 2008 p.14 (Scheme 1)".into(),
79 domain_tags: vec!["epistemic".into(), "authority".into()],
80 presumptive: true,
81 strength: SchemeStrength::Moderate,
82 },
83 }
84}
85
86pub fn argument_from_witness_testimony() -> SchemeSpec {
88 SchemeSpec {
89 id: SchemeId(EPISTEMIC_ID_OFFSET + 1),
90 name: "Argument from Witness Testimony".into(),
91 category: SchemeCategory::Epistemic,
92 premises: vec![
93 PremiseSlot::new(
94 "witness",
95 "The person who claims to have observed the event",
96 SlotRole::Agent,
97 ),
98 PremiseSlot::new(
99 "event",
100 "The event that was allegedly observed",
101 SlotRole::Proposition,
102 ),
103 ],
104 conclusion: ConclusionTemplate::positive("?event occurred as ?witness described", "?event"),
105 critical_questions: vec![
106 CriticalQuestion::new(
107 1,
108 "Is ?witness telling the truth (not lying)?",
109 Challenge::SourceCredibility,
110 ),
111 CriticalQuestion::new(
112 2,
113 "Was ?witness in a position to observe ?event?",
114 Challenge::PremiseTruth("witness".into()),
115 ),
116 CriticalQuestion::new(
117 3,
118 "Is ?witness's account of ?event consistent with other evidence?",
119 Challenge::ConflictingAuthority,
120 ),
121 ],
122 metadata: SchemeMetadata {
123 citation: "Walton 2008 p.309 (Scheme 2)".into(),
124 domain_tags: vec!["epistemic".into(), "testimony".into()],
125 presumptive: true,
126 strength: SchemeStrength::Moderate,
127 },
128 }
129}
130
131pub fn argument_from_position_to_know() -> SchemeSpec {
133 SchemeSpec {
134 id: SchemeId(EPISTEMIC_ID_OFFSET + 2),
135 name: "Argument from Position to Know".into(),
136 category: SchemeCategory::Epistemic,
137 premises: vec![
138 PremiseSlot::new(
139 "source",
140 "The person in a position to know",
141 SlotRole::Agent,
142 ),
143 PremiseSlot::new("domain", "The domain of knowledge", SlotRole::Domain),
144 PremiseSlot::new(
145 "claim",
146 "The asserted proposition within that domain",
147 SlotRole::Proposition,
148 ),
149 ],
150 conclusion: ConclusionTemplate::positive("?claim is plausibly true", "?claim"),
151 critical_questions: vec![
152 CriticalQuestion::new(
153 1,
154 "Is ?source in a position to know whether ?claim is true?",
155 Challenge::PremiseTruth("source".into()),
156 ),
157 CriticalQuestion::new(
158 2,
159 "Is ?source a truthful and reliable reporter?",
160 Challenge::SourceCredibility,
161 ),
162 CriticalQuestion::new(
163 3,
164 "Did ?source actually assert ?claim?",
165 Challenge::PremiseTruth("claim".into()),
166 ),
167 ],
168 metadata: SchemeMetadata {
169 citation: "Walton 2008 p.310 (Scheme 3)".into(),
170 domain_tags: vec!["epistemic".into()],
171 presumptive: true,
172 strength: SchemeStrength::Moderate,
173 },
174 }
175}
176
177#[cfg(test)]
178mod tests {
179 use super::*;
180
181 #[test]
182 fn expert_opinion_has_six_critical_questions() {
183 let scheme = argument_from_expert_opinion();
184 assert_eq!(scheme.critical_questions.len(), 6);
185 assert_eq!(scheme.premises.len(), 3);
186 }
187
188 #[test]
189 fn all_returns_three_epistemic_schemes() {
190 let schemes = all();
191 assert_eq!(schemes.len(), 3);
192 assert!(
193 schemes
194 .iter()
195 .all(|s| s.category == SchemeCategory::Epistemic)
196 );
197 }
198
199 #[test]
200 fn epistemic_ids_are_in_offset_range() {
201 for s in all() {
202 assert!(s.id.0 >= EPISTEMIC_ID_OFFSET);
203 assert!(s.id.0 < EPISTEMIC_ID_OFFSET + 100);
204 }
205 }
206}